three.js - 使用 Three.js 在本地轴上旋转相机 X

标签 three.js

我是 Three.js 的新手,也是 3d 空间引擎的新手,我想要实现的是 360 度等距柱状图像查看器。

到目前为止,我的脚本所做的是在 0,0,0 处创建一个摄像机,在同一位置创建一个球体网格,法线反转,并生成 360 度图像的发射图。

*Representation of scene using Blender's viewport.*

使用 Blender 视口(viewport)表示场景。

用户应该能够使用鼠标拖动或键盘箭头来旋转相机,因此我使用鼠标监听器创建了拖动功能,该功能可以计算相机的 Y 轴(蓝色)和 X 轴(红色)在每个位置的旋转量渲染帧。我还在 X 上创建了最小和最大旋转限制(因此用户无法向后旋转),如下所示:

var render = function () {
    requestAnimationFrame( render );

    if((camera.rotation.x < Math.PI/6 && speedX >= 0) || (camera.rotation.x > -Math.PI/6 && speedX <= 0))
        camera.rotation.x += speedX * (Math.PI/180);
    camera.rotation.y += speedY * (Math.PI/180);

    renderer.render(scene, camera);
};

其中 speedX 和 speedY 表示每个轴的旋转量。

到目前为止一切都很好,但由于这些旋转坐标是相对于世界而不是相机本身,X 旋转使相机变得疯狂,因为在 Y 轴旋转了几度后,相机的 X 轴不再是与世界 X 轴相同。

最后,我的问题是:如何在每一帧在其自己的 X 轴上旋转相机?

最佳答案

如果您希望相机的旋转在偏航(航向)、俯仰和滚动方面有意义,您需要设置:

camera.rotation.order = 'YXZ'; // default is 'XYZ'

有关详细信息,请参阅 this stackoverflow answer .

三.js r.82

关于three.js - 使用 Three.js 在本地轴上旋转相机 X,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41017734/

相关文章:

javascript - Three.js:将对象投影到垂直于相机的平面上

three.js - 顶点着色器中的复数运算

javascript - 如何将 Object3d.toJSON() 操作卸载给 Web Worker?

javascript - 来自 json 导出网格的具有 png alpha 透明度的平面 Material 不起作用

javascript - 使用三个 js 进行 Alpha 裁剪/遮蔽平面?

javascript - 线框立方体几何

Three.js GetWorldPosition()/localToWorld() 位置不正确?

javascript - 如何更新三种 Material 数据?

three.js - 在 Threes.js GLTFloader 中创建模型线框

algorithm - 我可以使用 3 维单纯形噪声实现在球面上生成噪声吗?