4

空間のどこにでもあるオブジェクトを含むシーンがあり、トラックボールのようなインターフェイスを作成しています。

2 つの個別のスライダーを動かして、それぞれ x 軸と y 軸で回転できるようにしたいと思います。

glRotatef(drawRotateY,0.0,1.0f,0);
glRotatef(drawRotateX,1.0f,0.0,0.0);
//draw stuff in space

ただし、X 回転は Y 回転に依存するため、上記のコードは機能しません。

gluLookAt() を使用せずにこれを達成するにはどうすればよいですか?

編集: 私の実装は、トラックボール インターフェイスよりもさらに単純であると言いたいです。基本的にはxスライダーの値が80でyスライダーの値が60の場合、縦に80度、横に60度回転します。私はそれらを互いに独立させる必要があります!

4

3 に答える 3

0

次のコードで開始できます:http ://www.cse.ohio-state.edu/~crawfis/Graphics/VirtualTrackball.html

GLウィンドウの現在のマウス位置を使用して仮想トラックボールを実装する方法について説明します。

于 2009-08-14T15:24:31.973 に答える
0

垂直方向および水平方向に回転するとは、対空砲のようなものですか? 垂直方向の Z 軸を中心に回転し、特定のコンパスの方向 (ヨー) を向いてから、特定の高度 (ピッチ) に回転しますか?

この場合は、2 つのローテーションを正しい順序で行うだけで、すべてがうまくいきます。この例では、最初に「ピッチ」回転を実行し、次に「ヨー」回転を実行する必要があります。すべてうまくいくでしょう。

より複雑なもの (たとえば、Elite の「コブラ」宇宙船など) を意味する場合は、より手間のかかるソリューションが必要になります。

于 2009-08-25T10:50:02.243 に答える
0

おそらく次のようなものを使用できます。

Vector v = new Vector(drawRotateX, drawRotateY, 0);
float length = v.length();
v.normalize();
glRotatef(length, v.x, v.y, v.z);
于 2009-08-14T15:34:18.430 に答える