我已经使用LibGDX,我需要相机能够旋转,也可以通过用户是可移动的,以及能够被放大到了一个情况,我的应用程序,内置。 我的移动和缩放精美相机工作相机控制,然而,当转动相机,摄像机,然后根据该旋转移动。 例如,如果相机被接通45度到左侧,并且用户拖动到移动摄像机的权利,它将向右上方移动,因为这是在相机的右侧正指向。 相反,我需要的相机总是它的旋转运动相对于屏幕/用户的输入,不管。
我确实有这个问题的一个解决方案,那就是简单地用“世界坐标”定位的相机,而不是基于此的“窗口坐标”我想现在使用。 这就产生了一个非常不愉快的用户体验,虽然,因为它使相机相当震荡,并导致我的变焦系统问题。 我想,但是我可以修补这些问题了大量的调整的,因为它是如此多的平滑已经在使用的窗口坐标,我真的喜欢走这条路。
我怀疑有一个优雅的解决这个看似简单的问题,在这里我可以做沿着这些线的矩阵或一些简单的计算,但是我在OpenGL的知识仍然是相当缺乏,我似乎无法弄清楚究竟需要发生要解决这个问题。 从别人更善于与OpenGL和所有这个矩阵将不胜感激任何想法!
===编辑===
过去在这里保存的值的对象基本上只是我的Vector2,这是在应用程序的不同部分所要求的自己的版本。 我不太记得在那里0.7F确切的推理,但据推测它只是降低移动灵敏度,如果我删除的问题仍然存在。
camera.position.set(cameraStartPosition.getX() - ((zoomCurrentPosition.getX() - zoomStartPosition.getX()) * 0.7f), cameraStartPosition.getY() + ((zoomCurrentPosition.getY() - zoomStartPosition.getY()) * 0.7f), 0);
cameraStartPosition - X和Y坐标的相机,当用户开始移动。
zoomStartPosition - 初始触摸启动变焦的X和Y坐标
zoomCurrentPosition - X和Y坐标,其中控制变焦的触摸目前
在这些x和y值被直接从着陆和touchDragged方法而采取。 如果我不是地方,设置那些下面的代码之后的代码,它创建了我在原来的职位,它移动的方式应该,但非常不连贯提到的问题。
Vector3 vector = new Vector3(x, y, 0);
camera.unproject(vector);
x = (int) vector.x;
y = CanvasAnywhereMain.HEIGHT - (int) vector.y;