使用触摸板移动PerspectiveCamera

时间:2014-10-26 18:46:14

标签: android libgdx perspectivecamera

我有一个触控板,我想用来移动相机。我当前的代码通过将由1缩放的camera.direction向量添加到位置向量来移动摄像机。似乎我不能使用任何小于1的东西,因为当我这样做时它会开始旋转。我想要使​​用

touchpad.getKnobPercentX()
touchpad.getKnobPercentY()

根据旋钮的位置缩放它的方法。这个问题是它返回一个小于1的值。任何大于1的东西都会使相机移动太快。这是我用来更新相机的代码,因为我无法使用触控板旋钮。

private void setKnobAction() {
    if (pad.getKnobPercentY() > 0f) {
        camera.position.add(camera.direction.scl(1f));
        camera.update();
    }
    if (pad.getKnobPercentY() < 0f) {
        camera.position.sub(camera.direction.scl(1f));
        camera.update();
    }
    if (pad.getKnobPercentX() > 0f) {
        right = camera.direction.cpy().crs(Vector3.Y).nor();
        camera.position.add(right.scl(1));
        camera.update();
    }
    if (pad.getKnobPercentX() < 0f) {
        right = camera.direction.cpy().crs(Vector3.Y).nor();
        camera.position.sub(right.scl(1));
        camera.update();
    }
}

这个方法在我的render()方法中被调用,所以它被多次调用。此外,如果knobPercent为0,它将开始奇怪地旋转。

1 个答案:

答案 0 :(得分:1)

Vector3.scl(float scalar)的javadoc说:

  

通过标量

缩放向量

这意味着,您实际上缩放了camera.direction向量 鉴于,direction向量通常是长度为1的Vector3,给出每个轴的百分比,您应该注意到问题。
缩放它会导致每帧移动更快,缩小它会导致每帧移动更慢 例如:您向x方向移动,camera.directionVector3(1, 0, 0)。你按比例缩放2.
现在它是Vector3(2, 0, 0),你在此框架中移动了2个单位。再次,它被缩放,在下一帧中它是Vector3(4,0,0),你在这帧中移动4个单位。它一直在继续 缩放比例低于1也是如此。

更糟糕的是缩放为零,因为它将camera.direction的长度设置为零。这意味着,您不再有关于方向的任何信息,这会导致奇怪的旋转。

所以你应该做什么:
存储另一个Vector3,将camera.direction的值复制到其中(在每个帧的开头),按getKnobPercentY()进行缩放(实际上您应该按getKnobPercentY() * delta * speed进行缩放)并将其添加到该位置 然后再次重置此Vector(将camera.direction的值复制到它)并对x值执行相同的操作(ofc现在使用crs(Vector3.Y)