首页 > 解决方案 > 如何正确使用 SetViewFromArray

问题描述

我有两个 3D 点:目标对象的中心和相机位置。我想设置一个视图,就好像我从相机位置看对象一样。

我正在努力弄清楚如何计算 setViewFromArray() 函数的视图参数。

View parameters: [position-x, position-y, position-z, target-x, target-y, target-z, up-x, up-y, up-z, aspect, fov (radians), orthoScale, isPerspective (0=perspective, 1=ortho)]

我假设“位置”是指相机位置,“目标”是我的对象。试过了,但我无法获得正确的视图。我也不知道“向上”是什么意思。

有人可以解释一下或分享示例代码吗?

谢谢班杜

标签: autodesk-forge

解决方案


最简单的方法是使用“viewer.restoreState(JSON_OBJ)”方法。

在 JSON_OBJ 对象内指定“目标对象”和相机的位置(“眼睛”),然后调用 restoreState。您可以指定其他内容,例如 FOV 和枢轴点,以获得您想要的外观。

这是一篇包含详细信息的博客文章:https ://forge.autodesk.com/blog/view-each-floor-using-vertical-explode

这是一个简单的示例,它指定目标和眼睛并调用 restoreState:

const JSON_OBJ = {"viewport":{"name":"",
    "eye":[-56.65177484061517,-110.22448381222459,48.75854608014884],
    "target":[-56.61241442215515,-110.13854629080645,48.725902642962545],
    "up":[0.13593096966393645,0.29678471606580187,0.9452203995872939],"worldUpVector":[0,0,1],
    "pivotPoint":[17.422795311668544,39.67309215526787,3.7083339691161967],"distanceToOrbit":172.6794473004014,
    "aspectRatio":1.9732770623333973,
    "projection":"perspective","isOrthographic":false,
    "fieldOfView":37.80748217565049}
}
        
viewer.restoreState(JSON_OBJ)

更新:

但是如果你更喜欢使用setViewFromArray,那么请确保使用getViewArrayFromCamera来获取相机状态数组,如下所示:

    let cameraState = viewer.getViewArrayFromCamera()
    > [126.9228, -105.0679, 107.23, 116.13, -28.34, 33.9, 0, 0, 1, 1.90909, 0.761012]

获取结果数组,然后移动相机,如下所示:

    viewer.setViewFromArray([126.9228, -105.0679, 107.23, 116.13, -28.34, 33.9, 0, 0, 1, 1.90909, 0.761012])

推荐阅读