绕任意轴旋转的矩阵导致的OpenGL 显示问题

帮师兄找一个OpenGL显示上的Bug, 是将原本放在CPU上做的旋转操作放到了GPU上做, 结果两边显示结果不一致……

正常结果应该是这样子:

但做了上述代码变动以后变成了酱紫……

可以看得出球体两边圆片的转动方向错误, 但是中间的转动却是正确的…… 最后和师兄一起想了好久, 才发现Shader里的旋转矩阵没有做转置(原本在CPU上做旋转时是用glm库生成的旋转矩阵, 它已经帮我做好转置的操作了额)

关于为何需要转置可以参考这篇博客: 绕任意轴旋转的矩阵推导 主要在推导时是建立在左手坐标系基础之上而非右手坐标系.

PS:
1. 其实也不需要转置, 直接将旋转角度取负就好了, 相比之下这样子做的性能消耗要小得多.
2. 在解决这个显示的问题时, 仅仅解决了旋转矩阵的问题还是不够的, 还在求向量长度时做了些修改, 即:

n.length()  ==>   length(n)

目前还不清楚为何这样子做结果会有很大的不同, 本来的话我会用后者, 但前者用起来也没报错囧

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注