0

我已经通过jPCT创建了魔方,现在我需要旋转整个魔方。我试图通过旋转矩阵来实现这一点,并且我已经旋转了单个立方体元素,但这似乎不是一个好方法..

所以我想围绕立方体旋转我的相机而不是旋转立方体。这很容易,但问题是 jPCT 随机改变了我的相机的方向,或者我犯了另一个错误,我无法修复它。

SimpleVector cameraPos = new SimpleVector(-20, 0, 0);
SimpleVector cubeCenter = new SimpleVector(2, 2, 2);

while (!org.lwjgl.opengl.Display.isCloseRequested()) { 
    refreshScene();

    // Camera position is repeatedly rotated
    cameraPos.rotateAxis(new SimpleVector(0, 0, 1), (float) Math.toRadians(1));
    // Here I set camera position
    world.getCamera().setPosition(cameraPos);
    // Camera looks at the center of cube, but unfortunately
    // not with fixed orientation
    world.getCamera().lookAt(cubeCenter);

    try {
        Thread.sleep(50);
    } catch (InterruptedException e) {

    }
}

上面的代码执行了立方体的这种奇怪的旋转:

当前相机旋转

这很酷,但我需要像这样旋转我的立方体: 所需的相机旋转

我试图通过setOrientation方法设置相机方向:

SimpleVector upVector = world.getCamera().getUpVector();
upVector.scalarMul(-1.0f);
world.getCamera().setOrientation(world.getCamera().getDirection(), upVector);

恕我直言,此代码中的最后一行应该颠倒相机方向,但它什么也不做。我使用最新版本的 jPCT。

如何实现正确的相机方向?非常欢迎任何帮助!

4

1 回答 1

0

如果你想旋转立方体,这似乎是你真正想要做的,为什么不简单地把一个虚拟 Object3D 放在它的中心,使立方体的所有元素都成为那个虚拟的孩子,然后只旋转虚拟呢?这实际上应该给你想要的结果。关于您的方法:您可以确定旋转不是随机的。你得到你在代码中要求的东西。为什么这会导致您在此处实际看到的内容,如果不知道您的完整场景设置,很难说清楚。无论如何,围绕空间中某个固定点旋转相机的最简单方法是使其在初始设置中看到该点,然后执行以下操作:

cam.moveCamera(Camera.CAMERA_MOVEIN, distance);
cam.rotateAxis(<some axis>, <float>);
cam.moveCamera(Camera.CAMERA_MOVEOUT, distance);

其中距离是从相机到旋转枢轴的初始距离。你可以在这里找到一个例子

于 2015-04-29T19:47:06.040 回答