Autodesk forge 使用Forge Viewer 6.5.2获取无效的投影矩阵和隐藏的自定义THREE.js对象
从Forge Viewer 6.4.1升级到6.5.2后,我遇到了几个问题: 来自Autodesk forge 使用Forge Viewer 6.5.2获取无效的投影矩阵和隐藏的自定义THREE.js对象,autodesk-forge,autodesk-viewer,Autodesk Forge,Autodesk Viewer,从Forge Viewer 6.4.1升级到6.5.2后,我遇到了几个问题: 来自viewer.navigation.getCamera()的projectionMatrix具有无限元素,例如: 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 此外,我还显示了一些自定义的T
viewer.navigation.getCamera()
的projectionMatrix
具有无限元素,例如:
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 pointclouds,这些点云对于某些摄影机视点是隐藏的。这只有在我没有用Forge加载任何合适的SVF模型时才会发生
注意,我正在加载“不可见三角形”的SVF模型来初始化forge viewer,以便能够在不加载任何适当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模型,由(-1-1-1)
和(1,1,1)
处的两个三角形组成。
scale
isVector3{x:132,y:240,z:59}
和globalOffset
isVector3{x:403,y:330,z:103.5}
。
其目的是偏移和缩放两个三角形以跨越场景,以
globalOffset
为中心,宽度、深度和高度等于scale
-Infinity
是造成问题的原因,还是您现在需要一种方法使其工作?我将进一步检查无穷大。矩阵中的-无穷大通常意味着近距离和远距离相等。你能分享更多关于摄像机值的信息吗?近、远、视场、纵横比、位置、四元数、比例、目标和场景的边界框?无限是问题的根源。现在,我只是回到以前的版本。如你所见,近距离和远距离是相等的。知道为什么吗?我在更新forge时没有做任何其他更改,所以看起来是内部forge的一些东西导致了它。我不确定为什么近距离和远距离是相等的。通常,它们是在渲染器运行时设置的,因此,您可能在第一次渲染之前使用摄影机?如果场景有任何深度,则近距离和远距离不应相等。你能试着把飞机调好看看会发生什么吗。可能是近:0.1和远:1000?是-无穷大
导致了问题,还是您现在需要一种方法使其工作?我将进一步检查无穷大。矩阵中的-无穷大通常意味着近距离和远距离相等。你能分享更多关于摄像机值的信息吗?近、远、视场、纵横比、位置、四元数、比例、目标和场景的边界框?无限是问题的根源。现在,我只是回到以前的版本。如你所见,近距离和远距离是相等的。知道为什么吗?我在更新forge时没有做任何其他更改,所以看起来是内部forge的一些东西导致了它。我不确定为什么近距离和远距离是相等的。通常,它们是在渲染器运行时设置的,因此,您可能在第一次渲染之前使用摄影机?如果场景有任何深度,则近距离和远距离不应相等。你能试着把飞机调好看看会发生什么吗。可能近:0.1,远:1000?