我需要旋转环境。由于 Three.js 不支持多维数据集环境旋转,因此我将采用最简单的方法并修改scene.rotation.y
,正如各地 Three.js 贡献者所建议的那样。
一切正常,直到相机平移。在这里亲自尝试一下https://stackblitz.com/edit/thirdjs-env-rotate并观察使用滑块旋转场景时相机的摆动。
我该如何纠正晃动?我似乎无法找到可以解决这个问题的算法。我尝试旋转controls.target
,但也许我的 3D 数学有问题。
您遇到的行为发生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
Run Code Online (Sandbox Code Playgroud)