2011-06-22 6 views
7

GLSceneローカル方向を中心に回転する3つのパラメータ(RollAngle、PitchAngle、TurnAngle)があります。下の画像では、どのようにしてキューブをグローバルな向き(オレンジ色の軸)を中心に回転させることができますか?グローバルローテーション

enter image description here

+3

このようなスクリーンショットで、あなたは私に質問をupvoteする以外に選択肢を残しません:) –

+0

'@Wouter van Nifterick'申し訳ありませんが、私はあなたを理解していません、どういう意味ですか? – Ata

+0

GLSceneとは何ですか?通常、私は単にglRotatef(angle、rot_axis.x、rot_axis.y、rot_axis.z)、または同等の変換を行うと言っています。 – datenwolf

答えて

3

"DummyCube"オブジェクトを親として使うことができますか?次に、ダミーキューブ内のキューブを最初に回転し、次にダミーキューブを回転させることができます。

+0

ありがとうアドバンス。はい、あなたは完全に正しいです。 – Ata

7

あなたはオイラー角に軸角度の回転を変換する必要があります。ここでは、コードといくつかの詳細にこのプロセスを説明するリンクです:
http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToEuler/index.htm

記事から:

yaw = atan2(y * sin(angle)- x * z * (1 - cos(angle)) 
       , 1 - (y2 + z2) * (1 - cos(angle))) 

pitch = asin(x * y * (1 - cos(angle)) + z * sin(angle)) 

roll = atan2(x * sin(angle)-y * z * (1 - cos(angle)) 
      , 1 - (x2 + z2) * (1 - cos(angle))) 

EDIT:変数は、ピッチ、ヨー、ロールの命名規則と一致するように改名。

+0

@ Mikola、あなたの提案したウェブサイトをチェックしました。 heading = atan2(y * sin(角度) - x * z *(1 - cos(角度))、1 - (y2 + z2)*(1 - cos(角度) (x * sin(angle)))---) 'bank = atan2(x * sin(angle))))' --- 'attitude = asin -y * z *(1 - cos(angle))、1 - (x2 + z2)*(1 - cos(angle))) – Ata

+0

このコードを説明できますか? – Ata

+2

3Dジオメトリへようこそ。 –

1

これは汚いカンニングですが、オブジェクトが原点(0,0,0)にあり、シーン内にオブジェクトが1つしかない場合は、カメラ(および光源)をオブジェクトを回転させる。

+0

私が知る限り、地域的な方向性とグローバルな方向性との間にある。はい、あなたは正しいです。私はグローバルな向きのオブジェクトを回転させるために、どのように数学的アルゴリズムを使うことができるかを知りたい。オイラー角を使うべきだと思います。しかし、どのように... – Ata