在我的应用程序中,我显示了一个 3D 图形,并向用户展示了用于旋转对象视图的控件。我的偏好不是实际旋转对象,而是围绕对象旋转相机,因此稍后添加诸如放大之类的操作会更简单一些。
使用 Three.js 以一定半径旋转相机似乎是一件容易的事。只需围绕 XZ 平面中具有一定半径的圆的每个点重新定位和重新瞄准相机。我的代码通过以下方式执行此操作:
render: ->
@camera.lookAt @model.position
@renderer.render @scene, @camera
rotate: (theta)->
@rotation += theta
@camera.position.x = @cameraDistance * Math.sin(@rotation)
@camera.position.z = @cameraDistance * Math.cos(@rotation)
@.render()
rotate()
每当用户单击按钮时,都会调用该方法。
这看起来很简单,实际上基本上是在许多 Three.js 示例应用程序中使用的。然而,当我这样做时,这个人物的运动并不是静止的旋转——它确实会旋转,但似乎也以某种椭圆的方式移动(见截图)。
此外,在进行健全性检查时,我发现执行console.log square(@camera.position.x) + console.log square(@camera.position.z)
不会产生@cameraDistance
数字,而是会从非常小的值增长到巨大的值。出于某种原因,在这种情况下,单位圆身份似乎不适用于我。
感觉就像我在这里遗漏了一些明显的东西。谁能告诉我它是什么?