我從我自己的矩陣/矢量操作遷移到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