我在一個由四元數旋轉的WebGL上下文中獲得了一個對象。現在我想根據當前的鼠標位置繞x軸旋轉它。我怎樣才能做到這一點?我正在使用glMatrix庫。沿着軸旋轉四元數
Q
沿着軸旋轉四元數
0
A
回答
2
glMatrix沒有(當前)包含很多四元數變換的方式。抱歉。然而,添加可能不是一個壞主意。
你可以在網上找到一些這些東西的參考。例如:this page對於基本的四元數學有一些很好的例子。在此期間,如果所有你想找的是圍繞十一旋轉認爲這將這樣的伎倆:(注意:未經測試的代碼前面這是網頁我聯繫上的算法只是一個快速優化!)
/**
* 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
項至第2或第三個插槽)。
相關問題
- 1. 沿着x軸和y軸旋轉
- 2. 四元數三軸旋轉
- 3. 如何正確地沿所有軸旋轉四元數?
- 4. 沿着世界座標軸旋轉
- 5. 四元數旋轉x軸45度
- 6. 拆分四元數到軸旋轉
- 7. 從初始和最終旋轉四元數獲得旋轉軸
- 8. 球員沿着錯誤的軸線旋轉?
- 9. 沿着一個軸旋轉一個精靈
- 10. Webgl:旋轉對象變得沿着軸線變形
- 11. 四元數旋轉誤差
- 12. 四元數旋轉opengl
- 13. 四元數 - 旋轉到
- 14. 四元數對象旋轉
- 15. 四元數的旋轉?
- 16. Unity旋轉和四元數
- 17. 沿着Z軸呈現HTML元素
- 18. 使用旋轉四元數將3d矢量值旋轉到單個軸
- 19. 沿X軸旋轉的手機角度
- 20. 如何旋轉沿x軸的視圖
- 21. 如何沿y軸旋轉圖像?
- 22. 在WPF中沿x軸旋轉畫布
- 23. 沿Z-軸旋轉在HTML5 - 倒裝卡
- 24. 沿着拖動的固定點旋轉
- 25. 沿着一個圓圈旋轉鏈接
- 26. 基於四元數的旋轉和樞軸位置
- 27. 用四元數來防止繞某個軸旋轉
- 28. 在一個軸上旋轉一個四元數?
- 29. 用四元數圍繞一個軸旋轉矢量
- 30. 當我沿x軸大小增加元素旋轉?
爲什麼要使用quaterion?矩陣要簡單得多,特別是在這種情況下(也可能更少的CPU)。 – Skizz 2012-02-09 23:20:38
你怎麼看?圍繞X軸的四元數旋轉需要8次乘法,2次加法和2次減法。對4×4矩陣的相同操作是16次乘法和8次加法。四元數學運算總是會更快,而從矩陣運算出來的唯一原因是如果你將被強制轉換爲矩陣(即:傳入着色器) – Toji 2012-02-10 06:27:30