我需要旋转环境。由于three.js不支持立方体环境贴图的旋转,我将采用最简单的方法,修改scene.rotation.y
,正如three.js的贡献者们所建议的那样。
一切都很顺利,直到相机被平移。您可以在此处自行尝试:https://stackblitz.com/edit/threejs-env-rotate,并注意使用滑块旋转场景时相机的晃动。
我该如何解决这种晃动?我似乎找不到能解决这个问题的算法。我尝试旋转controls.target
,但可能我的三维数学知识不足。
我需要旋转环境。由于three.js不支持立方体环境贴图的旋转,我将采用最简单的方法,修改scene.rotation.y
,正如three.js的贡献者们所建议的那样。
一切都很顺利,直到相机被平移。您可以在此处自行尝试:https://stackblitz.com/edit/threejs-env-rotate,并注意使用滑块旋转场景时相机的晃动。
我该如何解决这种晃动?我似乎找不到能解决这个问题的算法。我尝试旋转controls.target
,但可能我的三维数学知识不足。
controls.target
不受scene.rotation
影响,因此摄像机试图跟随指定的目标而发生摆动。这意味着您还应该将相同的旋转应用于controls.target
。position
、rotation
和scale
却没有改变。这使得OrbitControls的行为进一步偏离预期的结果。const radians = e.target.value * Math.PI / 180
controls.target.applyAxisAngle( camera.up, radians - scene.rotation.y )
camera.position.applyAxisAngle( camera.up, radians - scene.rotation.y )
scene.rotation.y = radians