違いは何ですか
glRotatef(angle, 1.0f, 0.0f, 0.0f);
glRotatef(angle, 0.0f, 0.0f, 1.0f);
と
glRotatef(angle, 1.0f, 0.0f, 1.0f);
そして、2 番目のパラメーター 1.0f を 5.0f に変更しても何も変わらないのはなぜですか? 最後に、x=0 ではなく x=5 を中心にオブジェクトを回転するにはどうすればよいですか?
回転させたい場合は、y座標が何であれx=5
、glTranslate
toを実行してから、原点に戻る必要があります。x=5
glRotate
glTranslate
だから何かのような
glTranslate(5, 0, 0);
glRotatef(...);
glTranslate(-5, 0, 0);
最初の質問には、完全を期すために@genpfaultの回答を含めています。glRotatef()
これは、渡したベクトルに対して行われるベクトルの正規化によるものです。
そして、2番目のパラメーターを1.0fから5.0fに変更しても、何も変わらないのはなぜですか?
渡すベクトルglRotatef()
は、使用前に正規化されます。
軸を足し合わせて回転を単純に合計することはできません。同じ結果の連結された変換は生成されません。もしそうなら、それは変換が交換可能であることを示唆していますが、明らかにそうではありません。
オブジェクトを持ち上げて、Y 軸を中心に 90 度回転させてから、X 軸を中心に 90 度回転させます。向いている様子をご覧ください。ここで元の位置に戻し、X 方向に 90 度、次に Y 方向に 90 度回転します。方向が異なることに注意してください。
どちらの順序付けでも同じ結果になるローテーションを見つけることはできますが、合計とは異なります。
回転軸が正規化されているため、他のパラメーターを変更しても (それらを均一にスケーリングする場合) 何も変化しません。