Camera 三点理解

Camera 三点理解,camera,geometry,three.js,Camera,Geometry,Three.js,任务如下: 我们有一个网格,在POS位置绘制,旋转ROT 此外,我们还有一个相机,其位置和旋转相对于网格,例如相机点是CPOS,相机旋转是CROT 如何计算相机的最终角度?我假设它是这样的: camera.rotation.x = mesh.rotation.x + viewport.rotation.x camera.rotation.y = mesh.rotation.y + viewport.rotation.y camera.rotation.z = mesh.rotation.z +

任务如下:

我们有一个
网格
,在
POS
位置绘制,旋转
ROT
此外,我们还有一个相机,其位置和旋转相对于
网格
,例如相机点是
CPOS
,相机旋转是
CROT

如何计算相机的最终角度?我假设它是这样的:

camera.rotation.x = mesh.rotation.x + viewport.rotation.x
camera.rotation.y = mesh.rotation.y + viewport.rotation.y
camera.rotation.z = mesh.rotation.z + viewport.rotation.z
这种做法既奇怪又错误

然后我决定在文件上读到它,完全失望了

有几种旋转结构(欧拉、四元数)。但我们想要的是不同的东西

想象一下,就像你在宇宙飞船上一样。它在太空中移动。你们坐在右舷炮塔上,看着目标。他们好像路过。。。 然后你们想转动你们的头——你们知道你们的头的角度(在原始的opengl中,我刚刚将头部旋转矩阵乘以船的旋转矩阵,得到了我的投影矩阵)

换句话说,我只需要
x
y
轴来进行相机旋转,组合在矩阵中。然后我想把它和物体的位置旋转矩阵相乘。最后一个矩阵就是我的投影矩阵

我怎么能在THREE.js中做同样的事情

-----编辑----- 谢谢你的回答

我应该给摄像机配哪种坐标?它应该是局部的,网格相对坐标,还是绝对坐标


我知道,这个问题是显而易见的,但是在THREE.JS文档中没有任何关于相对对象的描述(除了api描述)。答案可能不明确。

将相机添加为网格的子对象,如下所示:

mesh.add( camera );

当摄影机是对象的子对象时,将相对于父对象指定摄影机的位置和方向

您可以通过设置相机的
四元数
或Euler
旋转
来设置相机的方向--这是您的选择

请注意,渲染器会为您更新对象的
矩阵
矩阵世界
。您不需要手动执行此操作


three.js r.63

将相机添加为网格的子对象(mesh.Add(camera)),然后查看这是否提供了所需的行为。当相机是对象的子对象时,相机的位置在对象相对坐标中指定。(我理解你的问题了吗?如果理解,我会写一个答案。)绝对理解。很抱歉,我们花了很长时间测试您的解决方案。这绝对适合我!我为摄影机(旋转摄影机时)和网格(旋转网格时)生成四元数。摄影机围绕自己的轴旋转,网格围绕自己的轴旋转,并像他的孩子一样旋转摄影机。相对于网格定位的摄影机。一切都很好!