Получить неверную матрицу проекции и скрытые пользовательские объекты THREE.js с помощью Forge Viewer 6.5.2 - PullRequest
1 голос
/ 20 марта 2019

После обновления с Forge Viewer 6.4.1 до 6.5.2 у меня возникает пара проблем:

projectionMatrix из viewer.navigation.getCamera() содержит элементы бесконечности, например, :

0: 1.491671085357666
1: 0
2: 0
3: 0
4: 0
5: 1.7320507764816284
6: 0
7: 0
8: 0
9: 0
10: -Infinity
11: -1
12: 0
13: 0
14: -Infinity
15: 0

Кроме того, я отображаю некоторые пользовательские облака точек THREE.js, которые скрываются для определенных точек обзора камеры. Это происходит только в том случае, если я не загрузил ни одной подходящей модели SVF с помощью Forge.

Обратите внимание, что я загружаю модель SVF "невидимых треугольников", чтобы инициализировать просмотрщик кузницы, чтобы иметь возможность просматривать пользовательские облака точек без каких-либо загруженных SVF. Треугольники должны охватывать всю сцену. Раньше работал с 6.4.1.

Есть идеи, как заставить это работать для версии 6.5.2?

Редактировать Вот некоторые параметры камеры при получении значений бесконечности в матрице проекции:

camera: {
    ...
    far: 0.07279428289764538,
    near: 0.07279428289764538,
    matrix: Z.Matrix4
        elements: Float32Array(16)
        0: 0.7071067690849304 1: -0.7071067690849304 2: 1.2355465983659997 e-8 3: 0 4: 0.09901473671197891 5: 0.0990147516131401 6: 0.9901475310325623 7: 0 8: -0.7001400589942932 9: -0.7001400589942932 10: 0.1400279998779297 11: 0 12: 335.91473388671875 13: 307.50555419921875 14: 103.9164047241211 15: 1
     projectionMatrix: Z.Matrix4
       elements: Float32Array(16)
       0: 1.491671085357666 1: 0 2: 0 3: 0  4: 0 5: 1.7320507764816284 6: 0 7: 0 8: 0 9: 0 10: -Infinity 11: -1 12: 0 13: 0 14: -Infinity 15: 0 
     fov: 60, 
     position: Z.Vector3
       x: 338.37971488661725
       y: 309.97052196410925
       z: 103.42340670070932

    quaternion: Z.Quaternion
       w: 0.6975223178288207
       x: 0.6058184615827841
       y: -0.250938228461858
       z: -0.288923200051608

    scale: Z.Vector3
       x: 1
       y: 1
       z: 1
}


Зритель загружается следующим образом:


Autodesk.Viewing.Document.load(urn_base_64, (doc) => {
     const viewables = Autodesk.Viewing.Document
                    .getSubItemsWithProperties(doc.getRootItem(), {'type': 'geometry'}, true);

    const initialViewable = viewables[0];
    const svfUrl = doc.getViewablePath(initialViewable);
    let mat = new THREE.Matrix4();
    mat.compose(globalOffset, new THREE.Quaternion(), scale);

    const modelOptions = {
        applyScaling: {to: 'm'},
        placementTransform: mat,
        worldUpVector: new THREE.Vector3(0, 0, 1),
        sharedPropertyDbPath: doc.getPropertyDbPath(),
    };

    viewer.start(svfUrl, modelOptions,
         (model) => {
         ... 
    })

Здесь svf представляет модель .obj, состоящую из 2 треугольников в (-1 -1 -1) и (1, 1, 1). scale равно Vector3 {x: 132, y: 240, z: 59} и globalOffset равно Vector3 {x: 403, y: 330, z: 103.5}. Намерение состоит в том, чтобы сместить и масштабировать 2 треугольника, чтобы охватить сцену с центром в globalOffset с шириной, глубиной и высотой, равными scale.

...