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);

distance は、カメラから回転ピボットまでの初期距離です。ここで例を見つけることができます。

于 2015-04-29T19:47:06.040 に答える