После обновления с 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
.