我从我自己的矩阵/矢量操作迁移到GLM,我不明白一件事。GLM中的模型矩阵
OpenGL中的模型矩阵 - model_matrix = scale_matrix * rotate_matrix * translate_matrix,所以我们先翻译,然后旋转,并在最后一个比例。 但是,然后我尝试在GLM中这样做,它只在我使用乘法的逆顺序(translate * rotate * scale)时显示四舍五入正确的位置,但是对MVP矩阵(投影*视图*模型)应该如此。
示例代码
using namespace glm;
mat4 projection = ortho(0.0f, 1.0f, 0.0f, 1.0f);
mat4 translate = translate(mat4(1.0f), vec3(0.5f, 0.5f, 0.0f));
mat4 rotate = rotate(mat4(1.0f), 90.0f, vec3(0.0f, 0.0f, 1.0f));
mat4 scale = scale(mat4(1.0f), vec3(0.5f, 0.5f, 1.0f));
mat4 m = translate * scale * rotate;// must be scale * rotate * translate
mat4 mvp = projection * mat4(1.0f)/*view matrix*/ * m;
glUseProgram(shader->prog);
glUniformMatrix4fv(shader->uniforms[0]/*um_mvp*/, 1, GL_FALSE, value_ptr(mvp));
...
顶点着色器
attribute vec3 av_pos;
attribute vec2 av_tex;
uniform mat4 um_mvp;
varying vec2 vv_tex;
void main()
{
vv_tex = av_tex;
gl_Position = um_mvp * vec4(av_pos, 1.0);
}
“*在OpenGL模型矩阵 - model_matrix = scale_matrix * rotate_matrix * translate_matrix *” 说的是谁?你在谈论glRotate/Scale/Translate函数做了什么?或者你在说别的什么? –
不是吗?如果我们翻译X(5)* scaleX(2。0)我们将coords系统x缩放到2.0,然后移动到10而不是5个单位,因此,如果我们scaleX(2.0)* translateX(5)那么我们移动到5个单位然后缩放坐标系统,顺序很重要,不是? – Aristarhys