2

このコードを使用して、特定の軸で球を連続的に回転させようとしています:

gl.glRotatef(axisX, 0, 1, 0);
gl.glRotatef(axisY, 0, 0, 1);

axisX = (axisX+1)%360;
axisY = (axisY+1)%360;

変数axisXaxisYは両方とも現在 1 ずつインクリメントされており、これにより回転が右斜め方向に進みます。オブジェクトは約 45 度の回転に達した後、回転を開始し、反対方向に回転を開始します。x と y 以外の軸で連続的に回転させるにはどうすればよいですか?

注:仮想ジョイスティックを接続してaxisXとのaxisY値を制御し、ジョイスティックで表される軸上で球を回転させようとしています。誰かがそれについて何かアドバイスがあれば、それも素晴らしいでしょう。

編集: それを使用gl.glRotatef(angle, axisX, axisY, axisZ);すると機能して回転を維持するように変更しましたが、回転がスムーズではなく、回転軸を切り替えると回転が最初から始まるように見えます。

4

1 に答える 1

2
glLoadIdentity(); // Reset rotation and give a new one
glRotatef(theta[0],1.0,0.0,0.0);
glRotatef(theta[1],0.0,1.0,0.0);

最初の引数は角度で、次にピボットしたい軸です。

編集について: ここで軸と角度を混ぜているようです。軸は単位長のベクトルで、角度は 0 から 2*PI までです。

別の方法は、クォータニオンを使用してから、クォータニオンをマトリックスに変換し、マトリックスを現在のモデルビュー マトリックスとしてロードすることです。

それが役立つことを願っています。

于 2012-12-18T07:01:43.593 に答える