Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl 关于广告牌矩阵转换的一个问题_Opengl_Matrix_Glsl - Fatal编程技术网

Opengl 关于广告牌矩阵转换的一个问题

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

如您所见,billboard的GLSL代码非常简单,但我有一个问题,在我得到模型空间下的3轴后,为什么我不能使用矩阵来转换顶点(当我这样做时,只有Y轴看起来是正确的),但当我使用教程的方法时,效果很好。

请帮帮我,我真的很困惑,谢谢。

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;