Opengl 关于广告牌矩阵转换的一个问题
如您所见,billboard的GLSL代码非常简单,但我有一个问题,在我得到模型空间下的3轴后,为什么我不能使用矩阵来转换顶点(当我这样做时,只有Y轴看起来是正确的),但当我使用教程的方法时,效果很好。Opengl 关于广告牌矩阵转换的一个问题,opengl,matrix,glsl,Opengl,Matrix,Glsl,如您所见,billboard的GLSL代码非常简单,但我有一个问题,在我得到模型空间下的3轴后,为什么我不能使用矩阵来转换顶点(当我这样做时,只有Y轴看起来是正确的),但当我使用教程的方法时,效果很好。 请帮帮我,我真的很困惑,谢谢。OepnGL和GLSL是以列主视图作为默认矩阵布局构建的,因此,mat4 m;m[c][r]用于访问c-第列的r-第行,m[c]将c-第列返回为vec4。与此一致,矩阵构造函数使用列向量:mat4m(c0,c1,c2,c3),因此 将生成数学表示法中的矩阵: mat
请帮帮我,我真的很困惑,谢谢。OepnGL和GLSL是以列主视图作为默认矩阵布局构建的,因此,
mat4 m;m[c][r]
用于访问c
-第列的r-
第行,m[c]
将c
-第列返回为vec4
。与此一致,矩阵构造函数使用列向量:mat4m(c0,c1,c2,c3)
,因此
将生成数学表示法中的矩阵:
mat4x4 rotate = mat4x4(vec4(axisX, 0), vec4(axisZ, 0), vec4(-axisY, 0), vec4(0, 0, 0, 1));
因此
不等于
但实际上会使用变换矩阵的转置,这恰好是旋转矩阵的逆。谢谢你的回答,这是我的错,我没有弄清楚我的混淆点,很抱歉,事实上我可以理解我的矩阵变换并不等同于另一个,我的混淆点,我得到的矩阵(转置m),应该将模型空间下的顶点转换为新的模型空间(就像我们将法线或切线转换为世界空间或切线空间一样),我认为我得到的矩阵应该将顶点从父空间(模型空间)转换为子空间(新模型空间),但我不能得到正确的结果,如果你知道原因,请教我,谢谢。
mat4x4 rotate = mat4x4(vec4(axisX, 0), vec4(axisZ, 0), vec4(-axisY, 0), vec4(0, 0, 0, 1));
axisX.x axisZ.x -axisY.x 0
axisX.y axisZ.y -axisY.y 0
axisX.z axisZ.z -axisY.z 0
0 0 0 1
vertexModelSpace = (transpose(rotate) * vec4(vPosition, 1)).xyz;
vertexModelSpace = axisX * vPosition.x + axisZ * vPosition.y + -axisY * vPosition.z;