GLSL:用旋转矢量旋转?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GLSL:用旋转矢量旋转?相关的知识,希望对你有一定的参考价值。
我正在尝试使用GLSL进行骨骼动画。对于每个骨骼,我有一个平移(x,y,z)和一个旋转(俯仰,滚动,偏航)(以度为单位)。我可以为每个骨骼构建一个4x4矩阵,但这会在着色器中占用大量的寄存器空间,所以我只想存储每个骨骼的6个值,但我不知道如何做到这一点。
答案
我不知道怎么做是如何使用旋转vec3旋转一个点。
简单:不要。
Yaw-pitch-roll是一种编码方向的可怕方式,尤其适用于动画系统。请改用四元数。它是4个值而不是3个,旋转代码是众所周知的。
此外,它不需要像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);
这不是一切。但这就够了。这是三个cos
和三个sin
操作。这些都不是快速的操作。仅这一点可能需要与整个四元数/向量旋转计算一样长。但是在执行此操作之后,您现在必须进行多次乘法并添加以计算3x3矩阵。然后,经过所有这些,你仍然需要实际矩阵乘以旋转矢量。
以上是关于GLSL:用旋转矢量旋转?的主要内容,如果未能解决你的问题,请参考以下文章