1

私はopenglと3Dシェイプの作成にかなり慣れていません。したがって、私の例では、2 つの正方形があり、1 つは高さ/幅が 2 で、中心が原点座標 (0,0,-10) にあり、もう 1 つはウィンドウの左端にあります。画面の左端にある正方形を回転させずに、原点にある正方形を xz 平面に沿って回転させようとしています。これに対する私のアプローチは、中央の正方形の各 xyz 座標を変数に保存し、cos(theta) の動作を使用して xz 平面に沿って正方形を回転させるメソッドを作成することでした。私のコードは機能しますが、同じ機能を実行できるより効率的なメソッドが既に作成されている必要があるため、これは恐ろしいアプローチだと思います。glRotatef()を見てみたら、しかし、私が理解したことから、これはカメラビューのみを回転させ、最終的には中央の正方形と左端の正方形の両方を回転させますが、中央の正方形のみを回転させたいと考えています。3D 空間で単一の 2D 形状を簡単に回転できる既存の方法は他にありますか?

関連する場合に備えて、中央の正方形のために自分で作成した回転コードを含めました。

if (Keyboard.isKeyDown(Keyboard.KEY_LEFT)) {

            blue.setCircle(blue.getCircle()+1f);//getCircle is initially zero and gets incremented by 1 for everytime the program loops with the user holding the left button.

            blue.setXfrontTR((float)Math.cos(Math.toRadians(blue.getCircle())));//Changing top-right x coordinate of the middle square
            blue.setZfrontTR(-10f+ ((float)Math.cos(Math.toRadians(blue.getCircle()+270f)))); //Changing top-right z coordinate of the middle square.

            blue.setXfrontTL((float)Math.cos(Math.toRadians(blue.getCircle()+180f)));
            blue.setZfrontTL(-10f+ ((float)Math.cos(Math.toRadians(blue.getCircle()+90f))));//Changing top-left x,z coordinates

            blue.setXfrontBL((float)Math.cos(Math.toRadians(blue.getCircle()+180f)));
            blue.setZfrontBL(-10f+ ((float)Math.cos(Math.toRadians(blue.getCircle()+90f))));//Changing bottom-left x,z coordinates

            blue.setXfrontBR((float)Math.cos(Math.toRadians(blue.getCircle())));
            blue.setZfrontBR(-10f+ ((float)Math.cos(Math.toRadians(blue.getCircle()+270f))));//Changing bottom-right x-z coordinates
}
4

1 に答える 1

0

独立した動きを必要とする各オブジェクトにモデル ビュー マトリックスを指定すると、これを実現できます。いくつかの独立したオブジェクトをすばやく描画/移動する他のオプションは次のとおりです。

各オブジェクトについて:

pushMatrix()

描画オブジェクト

popMatrix()

モデルビューマトリックスにいる間...

描画の方法は、コーディングしている OpenGL のバージョンに大きく依存しますが、上記は単純な描画で機能します。私は OpenGL / 3D プログラミングの専門家ではないので、少し待っていただければ、私が提供するものよりも優れた知恵を聞くことができるかもしれません :)

于 2013-11-09T01:20:55.527 に答える