【问题标题】:Moving PerspectiveCamera using Touchpad使用触摸板移动 PerspectiveCamera
【发布时间】:2014-10-26 18:46:14
【问题描述】:

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

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() 方法中被调用,所以它被调用了好几次。此外,如果旋钮百分比为 0,它会开始奇怪地旋转。

【问题讨论】:

    标签: android libgdx perspectivecamera


    【解决方案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缩放它)并将其添加到位置。 然后再次重置此向量(将 camera.direction 的值复制到其中)并对 x 值执行相同的操作(ofc 现在使用 crs(Vector3.Y)

    【讨论】:

    • 我是否还需要使用我正在创建的新矢量,即使它已经在复制方向矢量?
    • 我想用复制应该可以工作,但是cpy() 会创建一个新的Vector3,最好存储1 个Vector3 并更改其值。
    • 谢谢,我已经想了好几个星期了。
    • @user1678551 所以你解决了你的问题?我很高兴能帮上忙:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多