私はGLSLを使用して骨格アニメーションを実行しようとしています。各骨について、私は平行移動(x、y、z)と回転(ピッチ、ロール、ヨー)(度)を持っています。私は各骨の4x4行列を構築することができましたが、それはシェーダーのレジスタ空間を大量に取るので、私は骨あたり6つの値を格納するだけですが、これを行う方法はわかりません。GLSL:回転ベクトルを使用した回転?
答えて
どのようにするかわからないのは、私が持っている回転vec3を使ってポイントを回転させる方法です。
シンプル:しないでください。
yaw-pitch-rollは、アニメーションシステムの場合、、特にの向きをエンコードするのはひどい方法です。代わりにクォータニオンを使用してください。これは3ではなく4つの値であり、回転のコードはよく知られています。
また、sin
およびcos
のような重量のある操作を必要としません。
必要な労力を比較して比較したい場合は、数学を考慮してください。
四元q
、位置v
を考えると、あなたはそれを回転させ、これを実行する必要があります。
vec3 temp = cross(q.xyz, v) + q.w * v;
vec3 rotated = v + 2.0*cross(q.xyz, temp);
数学の公平なビットです。今、YPRのケースであなたがしなければならないことを考えてみましょう。
vec3 cosYPR = cos(ypr);
vec3 sinYPR = sin(ypr);
これはすべてではありません。しかし、それはでも十分です。です。それは3つのcos
と3つのsin
操作です。これらはであり、高速ではありません。操作です。それだけではおそらく、クォータニオン/ベクトル回転計算全体と同じくらい長くかかるでしょう。しかし、これを実行した後、3x3の行列を計算するためにいくつかの乗算と加算を行う必要があります。そして、すべての後に、まだベクトルを回転させるために実際の行列の乗算を行う必要があります。
もっと効率的なものは何ですか?クォータニオンを使用するか、またはシェーダで回転行列を構成しますか? – Jonathan
@ジョナサン:私の編集を参照してください。 –
'vec3 rotate = v + 2.0 * cross(q.xyz、temp);'はさらに効率的であるべきです(1 DOTと1 MADを避けてください)?それがユニットクワットとあなたのものを必要としているかどうかは分かりませんが(しかし、ローテーションのために非ユニットクワットを使う人は誰ですか?) –
- 1. CGAffineTransformを使用したUIViewの回転
- 2. Java 3Dを使用してベクトルを回転する
- 3. LWJGL回転:回転しません
- 4. Python回転ファイルハンドラが回転しない
- 5. Pixasticを使った回転
- 6. unity3dで回転行列を適用してgameObjectを回転
- 7. 回転軸ベクトルを結合する
- 8. ベクトル(配列)を回転する
- 9. インタフェース内のボタンを回転/回転
- 10. 回転ベクトルセンサーの使用
- 11. 回転した要素をJavaScriptの回転方向に移動
- 12. して回転
- 13. 球の回転ベクトルの計算
- 14. 楕円の回転/回転グループ
- 15. 回転
- 16. glulookatを使用してカメラを回転
- 17. JavaScriptを使用して回転
- 18. が回転し、マウスドラッグ
- 19. AccelerateDecelerateInterpolatorを使用してImageViewが1回だけ回転する
- 20. IOSが回転アニメーションなしのデバイスを回転する
- 21. UiTextFieldは回転しません。iPadを回転させます。
- 22. 2d回りの回転
- 23. 回転したグラフと回転していないグラフを結合するR
- 24. CABasicAnimationを使用してCALayerを回転させた後、レイヤーは回転しない位置に戻ります
- 25. 回転UIButtonTypeDetailDisclosure
- 26. カーアニメーション回転ホイール
- 27. Java:回転イメージ
- 28. 回転アノテーションビュー
- 29. Androidアニメーション回転
- 30. OpenGLで回転
どうすればいいですか?値を6つの浮動小数点として、または2つのvec3として渡すことができます。これらの値を使ってすべての演算の構成行列を計算する方法がわからないということですか?また、レジスタ内の単一の4x4行列が本当にスペース問題であることは確かですか?私は、各頂点またはピクセルの4x4行列を計算することは、プロセッサを集中させることになると想像しています。それはあなたがしたいトレードオフですか? – user1118321
1つの4x4行列ではなく、1つの骨につき4x4行列です。どのようにするかわからないのは、私が持っている回転vec3を使ってポイントを回転させる方法です。 – Jonathan