2014-10-26 62 views
0

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

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

Vector3.scl(float scalar)的Javadoc说:

矢量由标量

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

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

所以你建议立即进行删除操作:
商店另一Vector3,由getKnobPercentY()(实际上你应该getKnobPercentY() * delta * speed缩放)的camera.direction的值复制到它(在每一帧的开始),它的规模和它添加到的位置。
重新复位此向量(复制camera.direction它的值),并做了x值同样的事情(OFC现在用crs(Vector3.Y)

+0

我还需要使用我创建连新载体虽然它已经在复制方向矢量? – user1678551 2014-10-27 23:06:38

+0

我猜测它应该可以工作,但'cpy()'创建一个新的'Vector3',最好存储1'Vector3'并更改它的值。 – Springrbua 2014-10-28 06:34:02

+0

谢谢,我一直想弄明白这个问题。 – user1678551 2014-10-29 23:40:07

相关问题