首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用Touchpad移动PerspectiveCamera

用Touchpad移动PerspectiveCamera
EN

Stack Overflow用户
提问于 2014-10-26 18:46:14
回答 1查看 123关注 0票数 0

我有一个触摸屏,我想用它来移动我的相机。我的当前代码通过将缩放为1的camera.direction矢量添加到位置矢量来移动摄像机。似乎我不能用比一个更少的东西,因为当我这样做的时候,它开始奇怪地旋转。我想使用

代码语言:javascript
运行
复制
touchpad.getKnobPercentX()
touchpad.getKnobPercentY()

方法根据旋钮的位置对其进行刻度。这方面的问题是,它返回的值小于1。任何超过一个的东西都会把相机移动得太快。这是我用来更新我的相机的代码,因为我不能使用Touchpad旋钮。

代码语言:javascript
运行
复制
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,它将开始奇怪地旋转。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-27 07:44:09

Vector3.scl(float scalar)的javadoc说:

用标量缩放这个向量

这意味着,您实际上缩放了camera.direction向量。

假设direction向量通常是长度为1的Vector3,给出每个轴的百分比,您应该注意到这个问题。

放大后,每个帧的移动速度会更快,缩小后,每个帧的移动速度也会变慢。

例如:你向x方向移动,你的camera.directionVector3(1, 0, 0).你把它按2刻度。

现在是Vector3(2, 0, 0),你在这个框架中移动两个单位。再次,它是缩放的,在下一个帧中是Vector3(4,0,0),在这个框架中移动4个单元。就这样一直持续下去。

同样的情况也适用于比例低于1的情况。

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

所以你应该做的是:

存储另一个Vector3,将camera.direction的值复制到它(在每个帧的开头),按getKnobPercentY()缩放它(实际上您应该按getKnobPercentY() * delta * speed缩放它)并将其添加到这个位置。

然后再次重置这个向量(将camera.direction的值复制到它),并对x-值做同样的事情(现在使用crs(Vector3.Y))

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26576594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档