四元数で回転されたWebGLコンテキストでオブジェクトを取得しました。今私は現在のマウスの位置に応じてx軸の周りに回転したいと思います。これどうやってするの?私はglMatrixライブラリを使用しています。軸に沿ってクォータニオンを回転する
0
A
答えて
2
glMatrixは(現在)四元数変換の方法にはほとんど含まれていません。ごめんなさい。おそらく、追加するのは悪い考えではないでしょう。
オンラインでは、これらのことについての参考資料を見つけることができます。たとえば、this pageには基本的な四元数演算の良い例がいくつかあります。一方、すべてのあなたが探してはXI 周りの回転であれば、これはトリックを行いますを考える:(先に未テストコードを注意してください。これは、私がリンク先のページのアルゴリズムのちょうど速い最適です!)
/**
* Rotates a quaternion by the given angle around the X axis
*
* @param {quat4} quat quat4 to rotate
* @param {number} angle Angle (in radians) to rotate
* @param {quat4} [dest] quat4 receiving operation result. If not specified result is written to quat
*
* @returns {quat4} dest if specified, quat otherwise
*/
quat4.rotateX = function (quat, angle, dest) {
if (!dest) { dest = quat; }
// NOTE: I really have no idea what this is for, the guy on the linked page seemed to think it was necessary, though.
angle *= 0.5;
var qax = quat[0], qay = quat[1], qaz = quat[2], qaw = quat[3],
qbx = Math.sin(angle), qbw = Math.cos(angle);
dest[0] = qax * qbw + qaw * qbx;
dest[1] = qay * qbw + qaz * qbx;
dest[2] = qaz * qbw - qay * qbx;
dest[3] = qaw * qbw - qax * qbx;
};
を
その間に、gl-matrix github pageに問題を追加して、役に立つと思われる操作をリクエストしてください。
0
このトリックを行う必要があります:あなたが使用できる
quat4.rotateX = function (quat, angle, dest) {
if (!dest) dest = quat;
quat4.multiply(quat, [Math.sin(angle/2), 0, 0, Math.cos(angle/2)]);
}
、例えば、
quat4.rotateX(myQuaternian, Math.PI/4);
(YとZ軸周りの回転は、第二にそのsin
用語を移動することによって行うことができますまたは3番目のスロット)
関連する問題
- 1. クォータニオンを軸回転に分割する
- 2. 世界軸に沿った回転
- 3. 軸に沿ってスプライトを回転する
- 4. Webgl:回転するオブジェクトが軸に沿って歪む
- 5. イメージをy軸に沿って回転させる方法は?
- 6. X軸に沿って携帯電話の角度を回転
- 7. WPFでx軸に沿ってキャンバスを回転
- 8. 3軸に沿った回転と、各軸の回転とを別々にするのはなぜですか?
- 9. プレーヤーが間違った軸に沿って回転していますか?
- 10. 回転するカメラが1つの軸に沿って失敗する
- 11. Pixi.jsで回転した後のY軸に沿ったスケーリング
- 12. ModelVisual3Dオブジェクトの中心をx軸、y軸、z軸に沿って順番に回転させる方法
- 13. クォータニオンを1軸で回転させますか?
- 14. XNAでのクォータニオンの回転
- 15. ストロークに沿ってテキストを描画して回転する
- 16. どちらかの軸に沿ってUIImageを反転
- 17. Numpy max軸に沿って
- 18. クォータニオン、オブジェクトをゆっくり回転させるには?
- 19. numpy軸に沿って分割する
- 20. クォータニオンを使ってポイントを中心にオブジェクトを回転させる方法は?
- 21. オブジェクトの回転をワールドx軸に沿って90度に設定する方法は?
- 22. 3軸(x、y、z)に沿って球を同時に回転させる方法
- 23. Flash Builder 4.6でY軸に沿ってイメージをどのように回転させますか?
- 24. Unrealエンジンのクォータニオン回転ジンバルの問題
- 25. クォータニオンで表されるオブジェクトのセットを回転するには?
- 26. パスに沿って回転する図形をアニメーション化する方法
- 27. クォータニオンをカメラの回転行列に変換する - OpenCV
- 28. グラフィックス(2D)回転:x軸を回転
- 29. JavaFX:軸を回転させずにオブジェクトを回転する
- 30. クォータニオンをベクトルに完全に回転させる
なぜquaterionを使用しますか?特にこのシナリオでは、行列がはるかに簡単になります(CPUも少なくなります)。 – Skizz
あなたはどのように考えますか? X軸の周りの四元数の回転は、8倍、2倍、および2回の減算をとる。 4×4行列に対する同じ演算は、16の乗算と8つの加算である。クォータニオンの数学はいつもより高速になります。行列の数学を使うには、とにかく行の下にある行列に変換することが強制されるのが唯一の理由です(シェーダに渡す) – Toji