考虑到现代OpenGL(3.x、4.x、ES 2和3、WebGL)和现代GLSL,对四元数的支持与对矩阵的支持处于什么状态?我发现越来越多的现代算法和论文,大多数时候完全绕过矩阵表示,只使用四元数,尤其是关于光照的,但我仍然需要在OpenGL或任何OpenGL ARB扩展中找到四元数的踪迹。四元数在这个Khronos标准中的地位是什么?
6uxekuva1#
不存在,您可以将它们作为vec4传递到着色器中,但您必须自己实现将四元旋转应用到向量。除此之外,您还需要传入vec3转换和投影参数。大多数情况下,从quat加上平移pls投影创建等价矩阵并传入mat4会更快,这主要是因为将mat4乘以向量比应用与quat相同的旋转更快(并且在硬件上更好地优化),如果你做得足够多,mat4在速度上会更胜一筹,即使考虑到将quat转换为mat4表示所需的工作量。
njthzxwz2#
8年后仍然不存在。我只想补充一点,至少有dot和cross,所以可以这样写一个实现:
dot
cross
vec4 mul(vec4 l, vec4 r) { return vec4(l.w * r.xyz + r.w + l.xyz + cross(l.xyz, r.xyz), l.w * r.w - dot(l.xyz, r.xyz)); } vec4 invert(vec4 q) { return vec4(-q.xyz, q.w) / dot(q, q); }
我不知道这样做是否会提高性能。
2条答案
按热度按时间6uxekuva1#
不存在,您可以将它们作为vec4传递到着色器中,但您必须自己实现将四元旋转应用到向量。
除此之外,您还需要传入vec3转换和投影参数。
大多数情况下,从quat加上平移pls投影创建等价矩阵并传入mat4会更快,这主要是因为将mat4乘以向量比应用与quat相同的旋转更快(并且在硬件上更好地优化),如果你做得足够多,mat4在速度上会更胜一筹,即使考虑到将quat转换为mat4表示所需的工作量。
njthzxwz2#
8年后仍然不存在。我只想补充一点,至少有
dot
和cross
,所以可以这样写一个实现:我不知道这样做是否会提高性能。