私は最初の実際の OpenGL プロジェクトに取り組んでいます。3x3x3のルービックキューブです。ここに私がこれまでに持っているものの簡単なスクリーンショットへのリンクがあります(私のルービックキューブ)
キューブの回転は、マウスの右ボタンを押しながらマウスをドラッグすることで行います。これは、NeHe チュートリアル ( NeHe Arcball )のアークボールの例を使用して機能します。
6 つの実際のクワッドを介して 1 つの立方体を表すクラス singleCubes があり、その描画メソッドで使用できる表示リストに格納されています。クラス ComplexCube には 3x3x3 の singleCube の配列があり、完全なルービック キューブとやり取りするときにインターフェイスとして使用されます。
ここで、マウスの左ボタンを押したままドラッグすると、特定の各面を回転させたいと思います。ピッキングを使用して、ユーザーがクリックした単一の立方体の対応する面の ID を取得します。これも機能します。そこで、面上の 1 つの立方体の側面をクリックし、ドラッグの方向に応じて、影響を受ける立方体の回転とオフセット係数を設定します。(色を変更するだけでなく、実際に顔が回転するのを見ることも実装したい)
今私の問題は、マウスの右ドラッグでルービックキューブを任意の方向に回転させると、たとえば逆さまになることです。そのため、側面をクリックして面を右に回転させたい場合、立方体が逆さまになっているかどうかを追跡できないため、間違った方向に進んでしまいます。アークボール回転を使用しているため、これを決定するために使用できる x または y 回転角度がありません。
質問 1:上にリンクされているアークボールの例を使用しているときに、マウスのドラッグ情報 (1 つの面を回転させるとき) を変換するために、立方体が逆さまになっている場合、または後で情報を取得するにはどうすればよいですか?
// In render function
glPushMatrix();
{
glMultMatrixf(Transform.M); // Rotation applied by arcball object
complCube.draw(); // Draw all the cubes using display lists
}
glPopMatrix();
セットアップ: C++ と Microsoft Visual Studio 2008、GLEW、freeglut