没有transfom,GLM矩阵似乎无法工作
glm::mat4 proj = glm::ortho(0.0f,960.0f,0.0f,540.0f,-1.0f, 1.0f);
GL_TRUE
必须设置:
glUniformMatrix4fv(GetUniformLocation(name),1 ,GL_TRUE,&matrix[0][0])
GLM是否已经假定是列主格式?
答案 0 :(得分:0)
如果您不想转置矩阵,则必须将着色器代码中的向量从 right 乘以矩阵:
mat4 transformation;
vec4 vertexPosition;
gl_Position = transformation * vertexPosition;
说明:
请参见GLSL Programming/Vector and Matrix Operations:
此外,*运算符可用于相应维度的矩阵向量乘积,例如:
vec2 v = vec2(10., 20.); mat2 m = mat2(1., 2., 3., 4.); vec2 w = m * v; // = vec2(1. * 10. + 3. * 20., 2. * 10. + 4. * 20.)
请注意,向量必须从右边乘以矩阵。
如果将向量从左侧乘以矩阵,则结果相当于将列向量从右侧乘以转置矩阵。这相当于将列向量从右边乘以转置矩阵:
因此,从左向矩阵乘以一个向量对应于从右向转置矩阵乘以一个向量:vec2 v = vec2(10., 20.); mat2 m = mat2(1., 2., 3., 4.); vec2 w = v * m; // = vec2(1. * 10. + 2. * 20., 3. * 10. + 4. * 20.)
这意味着:
如果矩阵是这样定义的:
mat4 m44 = mat4(
vec4( Xx, Xy, Xz, 0.0),
vec4( Yx, Xy, Yz, 0.0),
vec4( Zx Zy Zz, 0.0),
vec4( Tx, Ty, Tz, 1.0) );
矩阵统一mat4 transformation
的设置如下(请参见glUniformMatrix4fv
:
glUniformMatrix4fv( .... , 1, GL_FALSE, &(m44[0][0] );
然后必须从右将向量乘以矩阵:
gl_Position = transformation * vertexPosition;
但是当然可以将矩阵设置为转置:
mat4 m44 = mat4(
vec4( Xx, Yx, Zx, Tx),
vec4( Xy, Yy, Zy, Ty),
vec4( Xz Yz Zz, Tz),
vec4( 0.0, 0.0, 0.0, 1.0) );
设置为统一变量时,或可以转置:
glUniformMatrix4fv( .... , 1, GL_TRUE, &(m44[0][0] );
然后必须将向量从左乘以矩阵:
gl_Position = vertexPosition * transformation;
请注意,glm API documentation是指The OpenGL Shading Language specification 4.20。