【发布时间】:2014-03-16 13:33:19
【问题描述】:
我刚开始在 libgdx 中玩 3D arround。我已经知道如何画基本的Models,我试着用CameraController 来玩arround。现在我想创建一个FirstPersonCamera 或FirstPersonCameraController。我考虑过扩展PerspectiveCamera 并在其中添加MyMovingObject target。 MyMovingObject 将持有一个x, y, z position,其中y 是一个常数值,因为我目前无法移动up/down。所以我的动作基本上是二维的。 MyMovingObject 还将存储 left/right rotation,这是其 moving direction/ xSpeed, zSpeed 所需的。但是Player 也应该能够上下查看,MyMovingObject 并不真正需要这种向上/向下旋转,因为它只会更改视图而不会更改其他属性。所以我不确定我是否走对了路。
我希望能够使用W,A,S,D 向前、向左、向右、向后移动,并使用鼠标向左向右旋转。我也想使用鼠标上下查看,就像在大多数First Person 游戏中一样。
我应该使用另一种方式,而不是通过扩展PerspectiveCamera 创建自己的相机吗?
还是这种方法很好,我只需要将上/下旋转存储在MyMovingObject 中,如果它仅用于视图?
还是使用W,A,S,D and mouse 控制摄像头并根据摄像头位置和旋转更新MyMovingObjects 位置会更好?
我希望你明白我的意思。解释起来似乎有点复杂(至少对我来说)。
编辑:我现在为我的 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.9 y 它只是不执行旋转。但真正发生的是:我旋转到 - 0.9 然后它围绕 Y 轴旋转,在另一侧它向上旋转,即使我向下移动鼠标。你能解释一下为什么吗?为什么我向下看转身时Y轴会翻转?
编辑:现在可以使用了。似乎我的 upVector 有时会得到一些错误的值。对于陆基凸轮,您还可以使用 Y 轴和方向矢量的叉积。不需要 upVector。
【问题讨论】: