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