Autodesk forge 使用Forge Viewer 6.5.2获取无效的投影矩阵和隐藏的自定义THREE.js对象

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

从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
此外,我还显示了一些自定义的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
is
Vector3{x:132,y:240,z:59}
globalOffset
is
Vector3{x:403,y:330,z:103.5}

其目的是偏移和缩放两个三角形以跨越场景,以
globalOffset
为中心,宽度、深度和高度等于
scale

-Infinity
是造成问题的原因,还是您现在需要一种方法使其工作?我将进一步检查无穷大。矩阵中的-无穷大通常意味着近距离和远距离相等。你能分享更多关于摄像机值的信息吗?近、远、视场、纵横比、位置、四元数、比例、目标和场景的边界框?无限是问题的根源。现在,我只是回到以前的版本。如你所见,近距离和远距离是相等的。知道为什么吗?我在更新forge时没有做任何其他更改,所以看起来是内部forge的一些东西导致了它。我不确定为什么近距离和远距离是相等的。通常,它们是在渲染器运行时设置的,因此,您可能在第一次渲染之前使用摄影机?如果场景有任何深度,则近距离和远距离不应相等。你能试着把飞机调好看看会发生什么吗。可能是近:0.1和远:1000?是
-无穷大
导致了问题,还是您现在需要一种方法使其工作?我将进一步检查无穷大。矩阵中的-无穷大通常意味着近距离和远距离相等。你能分享更多关于摄像机值的信息吗?近、远、视场、纵横比、位置、四元数、比例、目标和场景的边界框?无限是问题的根源。现在,我只是回到以前的版本。如你所见,近距离和远距离是相等的。知道为什么吗?我在更新forge时没有做任何其他更改,所以看起来是内部forge的一些东西导致了它。我不确定为什么近距离和远距离是相等的。通常,它们是在渲染器运行时设置的,因此,您可能在第一次渲染之前使用摄影机?如果场景有任何深度,则近距离和远距离不应相等。你能试着把飞机调好看看会发生什么吗。可能近:0.1,远:1000?