更新相机助手投影矩阵(three.js)

updating camera helper projection matrix (three.js)

我通过将相机设置为使用它们的 matrixWorld 属性来在两个从 3dsmax 导出的虚拟模型之间切换相机。

camera_foreground.matrixWorld = (dummy_shot1.matrixWorld);
camera_foreground.updateProjectionMatrix();

这很好用,但我创建的 camera_helper 没有继承矩阵变化。

它不允许我在助手本身上 运行 updateProjectionMatrix()。我试过将助手作为原始相机的父母。我还尝试将 helper.matrixWorld 设置为相同的 dummy_shot1.matrixWorld。让助手与其创建的相机一起更新的最佳方法是什么 for/from?

您可以使用 THREE.CameraHelper.update() 更新相机助手的截锥体。

给定两个摄像头:camera1camera2,您可以将 CameraHelper 变换从 camera1 切换到 camera2,如下所示:

cameraHelper.camera = camera2;
cameraHelper.matrix = camera2.matrixWorld;
cameraHelper.update();

备注

另一种对您来说似乎更方便的解决方案是为每个相机创建一个 THREE.CameraHelper 并使用 :

切换当前显示的助手
camera1.helper.visible = false;
camera2.helper.visible = true;

另外,THREE.Layers也可以用来控制当前显示的助手

3dsmax cameras/camera 3dsmax collada 导出器不支持动画。为了解决这个问题,我正在导出已经 parented 到所述相机的假人(从 max 到 threejs)。我担心假人会在没有动画的情况下通过(因为 parents(3dsmax 相机)被忽略了)。

由于相机 location/rotation 在将矩阵复制到 three.js 相机时工作正常,因此假人通过得很好(我认为)。当试图让助手做同样的事情时出现了问题(通过调试相机查看场景时 apparent)。

似乎 camera_helper objects 在 three.js 中不能很好地处理这些特定假人的矩阵(可能是因为在 3dsmax 中它们继承自 parent ).奇怪的是相机(如上所述)工作正常。

为了解决这个问题,我使用了一个很棒的 maxscript (http://www.breidt.net/scripts/mb_collapse.mcr) 来 copy/bake 从 3dsmax 相机到它的虚拟(不再继承)的所有 parent 关键帧数据。然后将 collada friendly dummy 导出到 three.js,相机和它的助手都可以在那里很好地工作。

感谢 Neeh 的帮助和提问。在重建一个要上传的测试场景时,我注意到新的假人(没有 parented 到相机)与助手一起工作得很好。