推荐的方法来接近OpenGL中的旋转

时间:2014-07-14 16:16:45

标签: c opengl quaternions

我目前正在OpenGL计划中编写转换实现。我正处于需要旋转编码的位置。这是个问题:

我有四元数,但是顶点着色器不是(例如,没有四元数"乘法"在GLSL语言中,据我所知)。虽然我可以理解四元数的有用性,但似乎无论如何我最终都必须使用矩阵。我该怎么办?我是否使用四元数并将它们转换为变换矩阵,或者是否有其他我缺失并应该做的事情(可能在顶点着色器中对四元数乘法进行硬编码)?

2 个答案:

答案 0 :(得分:2)

了解现代OpenGL轮换的一个很好的资源是从opengl-tutorial.org阅读Tutorial 17: rotations。我不会一字一句地复制页面,但简而言之,

你不在GLSL中使用四元数。将四元数转换为旋转矩阵,并在模型矩阵中使用它。您的顶点将像往常一样使用模型 - 视图 - 投影矩阵旋转。

答案 1 :(得分:1)

通常,您可以将所有转换组合成单个模型 - 视图 - 投影矩阵并将其传递给着色器。

但是如果您需要在glsl中执行四元数旋转(例如,您可以使用quats来节省内存),那么您可以使用此代码通过规范化的四元数来旋转矢量:

vec3 quat_transform( vec4 q, vec3 v )
{
    return v + 2.*cross( q.xyz, cross( q.xyz, v ) + q.w*v ); 
}