Model
,并尝试使用CameraController
进行操作。现在我想创建一个FirstPersonCamera
或者FirstPersonCameraController
。我考虑扩展PerspectiveCamera
并向其添加一个MyMovingObject target
。这个MyMovingObject
会保存一个x, y, z position
,其中y
是一个常量值,因为我目前无法移动上/下
。所以我的移动基本上是在2D平面内进行的。这个MyMovingObject
还将存储left/right rotation
,这是它的moving direction
/xSpeed, zSpeed
所需的。但是Player
也应该能够上下看,而这个上下旋转对于MyMovingObject
并不是真正需要的,因为它只改变视角而不影响其他属性。所以我不确定我是否走了正确的路线。我希望通过使用
W,A,S,D
控制前进、向左、向右、向后,并通过鼠标左右旋转来实现左右旋转,同时通过鼠标上下移动来实现上下查看,就像大多数第一人称
游戏一样。我应该使用另一种方式,而不是通过扩展
PerspectiveCamera
创建自己的相机吗?
或者这种方法很好,我只需要将上下旋转也存储在MyMovingObject
中,即使它仅用于视角?还是更好的方法是使用
W,A,S,D和Mouse
来控制相机,并根据相机的位置和旋转更新MyMovingObject
的位置?希望你能理解我的意思。对我来说,解释起来有点复杂。
编辑: 我现在正在为我的NPC和玩家使用Vector3 direction
,Vector3 position
和Vector3 size
。我通过执行以下操作计算速度:xSpeed = direction.x / (direction.x + direction.z) * speed;
zSpeed类似。通过这样做,我将y值“过滤”出来,得到x和y的百分比。唯一的问题是,当我直视天空时,x和z都是0。我可以通过使用一个“UpVecotr”,在进行“俯仰旋转”时将其旋转来修复它。但是如何旋转它?我需要围绕侧向量旋转它。谢谢。
if (direction.y < 0.9 && angle > 1) doPitchRotation(); else if (direction.y > -0.9 && angle < 1) doPitchRotation();
所以如果我向下旋转并且我仍然看向至少-0.9y,它就不执行旋转。但真正发生的事情是:我旋转到-0.9,然后围绕Y轴旋转,在另一侧向上旋转,即使我向下移动鼠标也是如此。你能解释一下为什么吗?为什么当我向下看时Y轴翻转了呢?
编辑:现在它正常工作了。似乎我的upVector有时会出现错误值。对于基于陆地的摄像机,您还可以使用Y轴和方向向量的叉积。不需要upVector。
Vector3.cpy()
似乎会创建一个new Vector3()
并将其赋值为其他Vecotr3的值。在每个渲染循环中创建新对象不是很好。因此,我会使用一个帮助函数Vector3,它可以获取临时值。 2)对于陆地相机,您也可以围绕方向.crs(Vector3.Y)进行俯仰旋转,据我所知。我应该编辑您的答案吗?然后我会标记它为已接受! - Robert P