使用libgdx,如何在不重置视图的情况下重置PerspectiveCamera,以便正确旋转正确的轴?

时间:2014-02-17 22:37:29

标签: java rotation screen libgdx perspectivecamera

我正在使用libgdx。我正在阅读基础知识,所以我只是使用以下PerspectiveCameras显示一个框来显示一组轴和一个框:

environment = new Environment();

cam = new PerspectiveCamera(67, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
cam.position.set(10f, 10f, 10f);
cam.lookAt(0, 0, 0);
cam.near = 0.1f;
cam.far = 300f;
cam.update();

zerocam = new PerspectiveCamera(67, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
zerocam.position.set(10f, 10f, 10f);
zerocam.lookAt(0, 0, 0);
zerocam.near = 0.1f;
zerocam.far = 300f;
zerocam.update();

使用下面的内容,我可以在不旋转轴的情况下旋转盒子:

这是我的RendererClass:

modelBatch.begin(zerocam);
modelBatch.render(drawAxis(0), environment);
modelBatch.render(drawAxis(1), environment);
modelBatch.render(drawAxis(2), environment);
modelBatch.end();

modelBatch.begin(cam);
modelBatch.render(drawBox(), environment);
modelBatch.end();

cam.update();

这是我的ScreenClass:

Gdx.input.setInputProcessor(new CameraInputController(cam));

正如您所看到的那样,它将旋转cam PerspectiveCamera而不是zerocam PerspectiveCamera,因此框会旋转但轴保持固定。问题是如果我垂直拖动所以盒子放在一边,左/右拖动仍然像时钟一样旋转而不是旋转木马。希望这是有道理的。

如何使用public class ScreenClass implements Screen, InputProcessor的以下方法正确旋转框。

touchDragged(int screenX, int screenY, int pointer)

基本上当我向左或向右拖动时,无论凸轮实际发生什么,我都希望盒子左/右旋转。

我正朝着这个方向前进:从我的rotateBox(int x, int y)调用RenderClass中的ScreenClass来计算要旋转的数量。

public void rotateBox(int x, int y) {
    Vector3 difVector = cam.position.sub(zerocam.position);

    cam.rotateAround(new Vector3(0f, 0f, 0f),
            difVector,
            1f);
}

这只是camzerocam的区别,但我觉得这是正确的方向。我想我只是以某种方式使用x和y值来计算旋转的方向,然后以某种方式计算出应用于特定轴的浮点值。

由于

0 个答案:

没有答案