我已经到了我的应用程序中使用LibGDX构建的情景,我需要相机能够旋转,并且也可以由用户移动,以及能够被缩放。我的相机控制移动和缩放相机的工作非常漂亮,但是,当相机旋转时,相机将根据该旋转进行移动。例如,如果相机向左旋转45度,并且用户向右拖动以移动相机,则相机将向右上方移动,因为这是相机右侧正指向的位置。相反,我需要相机始终相对于屏幕/用户输入移动,而不管其旋转。LibGDX移动一个旋转的相机
我对这个问题有一个解决方案,那就是简单地使用“世界坐标”来定位相机,而不是基于我现在尝试使用的“窗口坐标”。这会产生令人不愉快的用户体验,因为它会使相机变得相当不连贯,并导致我的缩放系统出现问题。我认为我可以用很多调整来修补这些问题,但是,因为使用窗口坐标已经非常平滑,所以我更愿意去那条路线。
我怀疑有一个优雅的解决方案,看似简单的问题,我可以做一个矩阵或沿着这些线的简单计算,但我在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 - 初始触摸启动变焦
zoomCurrentPosition的X和Y坐标 - 将X和Y坐标,其中控制所述变焦触摸目前是
在这些x和y值直接从touchDown和touchDragged方法中获取。如果我将代码放在下面的代码后面,代码就会创建我在原文中提到的问题,它会按照它应该的方式移动,但非常不连贯。
Vector3 vector = new Vector3(x, y, 0);
camera.unproject(vector);
x = (int) vector.x;
y = CanvasAnywhereMain.HEIGHT - (int) vector.y;
您可以添加一段代码,显示您现在如何移动/旋转摄像头吗? –
我的输入代码在这一点上相当大,所以现在我只提出移动相机本身的线,以及我用来将x和y转换为“世界空间”的块,主要用于应用程序中的其他触摸事件。我很高兴根据需要发布更多内容,我只是不想发布大量不必要的代码。此外,就目前而言,我只是使用camera.rotate(value)旋转相机。由于这些问题,我还没有建立适当的控制系统。 – Synthetik