【问题标题】:jPCT: Strange camera rotationjPCT:奇怪的相机旋转
【发布时间】:2015-07-08 23:38:23
【问题描述】:

我已经通过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。

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

【问题讨论】:

    标签: java camera rotation jpct


    【解决方案1】:

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

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

    其中距离是从相机到旋转轴的初始距离。 你可以find an example here

    【讨论】:

      猜你喜欢
      • 2012-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-25
      • 2014-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多