GLM中的模型矩阵
Model matrix in GLM
我从自己的矩阵/向量运算迁移到GLM,但我一件事都不懂。
OpenGL-中的模型矩阵model_matrix=scale_matrix*旋转矩阵*平移矩阵,因此我们首先平移,然后旋转,最后缩放。但我试图在GLM中这样做,只有当我使用乘法的逆序(平移*旋转*缩放)时,它才会在正确的位置显示quad,但它对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);
}
所以我们首先平移,然后旋转,最后缩放。
。。。恰恰相反。
你的"完整"矩阵看起来是这样的(为了简单起见,把旋转放在一边):
proj * view * translate * scale
,对吧?这是正确的:这意味着你的点X将以这种方式转换:
proj * view * translate * scale * X
,这意味着您将首先应用缩放,然后应用平移,然后应用相对于摄影机的定位,然后应用投影。这是完美的。
你的问题似乎是"翻译前量表"之类的东西。想象一下,在X轴上平移10,比例为2。你把你的矩阵应用到,比如说一艘船上。
- 你缩放你的船。你现在有一艘大船,但仍在原点
- 你翻译你的船。它现在仍然很大,但有10个单位的起源
如果你做相反的事情:
- 你翻译你的船。它的中心现在位于原点的10个单位
- 你可以按比例缩放你的船。每个坐标都乘以相对于原点的2,这是遥远的。。。所以你最终得到了一艘大船,但以2*10=20为中心。这是你不想要的
这有意义吗?
(来源:opengl tutorial.org/初学者教程/tutorial-3-矩阵/)
相关文章:
- 了解 GLM- openGL 中的相机转换
- QTableView:endMoveRows在模型中重置水平页眉大小
- OpenGl glm rotate
- 将IBM Rhapsody模型集成到VS 2019中
- 旋转模型矩阵时的形状失真
- OpenGL 和 GLM 矩阵无法正确扩展,总是按比例缩小
- 发布旋转矩阵(openGL/glm)
- 成员函数调用和C++对象模型
- 连接 dockerized 模型和 dockerized 数据库时出现"无法 SQLConnect"错误
- 如何在 glRotatef 中使用 glm::mat4
- 打印 ONNXRUNTIME::图形没有模型
- C++内存模型和位字段的最大序列
- OpenGL 转换无法使用 GLM 矩阵
- 使用SIR模型的疾病爆发模拟
- Qt - QVector 和模型视图 - 从列表视图获取自定义类的最佳方法是什么?
- 如何在 ECS 模型中组织实体?
- 在官方张量流 resnet50 模型上运行 tflite 精度工具
- GLM中的模型矩阵
- GLM视图矩阵导致模型矩阵没有效果
- 使用glm创建基于三个vec3的模型矩阵