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

时间:2017-03-01 21:05:12

标签: camera three.js helper

我通过将其设置为使用其matrixWorld属性,在3dsmax中的两个导出虚拟对象之间切换相机。

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

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

它不允许我在帮助程序本身上运行updateProjectionMatrix()。我已经尝试将帮手养育到原始相机。我也尝试将helper.matrixWorld设置为相同的dummy_shot1.matrixWorld。什么是让助手更新以及为其创建的相机更新的最佳方法?

2 个答案:

答案 0 :(得分:0)

您可以使用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也可用于控制当前显示的助手。

答案 1 :(得分:0)

3dsmax collada导出器不支持3dsmax相机/相机动画。为了解决这个问题,我出口了假人(从max到3js)。我担心假人会在没有动画的情况下通过(因为父母(3dsmax摄影机)被忽略了)。

这些假人很顺利(我想),因为当将矩阵复制到three.js相机时,相机位置/旋转工作正常。当试图让帮助者做同样的事情时出现问题(通过调试摄像机查看场景时很明显)。

似乎在three.js中的camera_helper对象与这些特定假人的矩阵不能很好地匹配(可能是因为在3dsmax中它们是从父母那里进入的)。奇怪的是,相机(如上所述)工作正常。

为了解决这个问题,我使用了一个很棒的maxscript(http://www.breidt.net/scripts/mb_collapse.mcr)来复制/烘焙3dsmax相机中的所有父关键帧数据到它的虚拟(不再继承)。然后将collada友好的假人导出到three.js,其中相机和它的助手都很好用。

感谢Neeh的帮助和问题。它正在重建一个测试场景上传,我注意到新的假人(不是相机的父母)与助手一起工作得很好。