我在一个由四元数旋转的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