我想将3D对象置于屏幕中心并能够旋转/缩放它。在进行旋转/缩放时,对象中心仍处于同一位置。 (类似于MeshLab演示文稿)。
这是我的顶点着色器:
gl_Position = mvp * vec4(VertexPosition,1.0);
这是我在客户端代码中的模型视图矩阵:
mat4 mvp = glm::translate(glm::mat4(1), vec3(-centerx, -centery, -centerz));
mvp = glm::scale(view, vec3(0.5/zoom, 0.5/zoom, 0.5/zoom));
Centerx,centery等是对象的中心。缩放是对象的最大大小(因此它显示在-1和1之间)。如何进行正确的转换?我还需要其他东西吗?
这是一个方框,我按顶点位置对其进行着色。
答案 0 :(得分:1)
我对glm不太熟悉,但我的猜测是你必须更新着色器中的矩阵。您可以使用glUniformMatrix*(mvp, ...)
等函数执行此操作。
当您操作要在着色器中使用的矩阵或其他变量时,必须将此更新发送到着色器,否则它将不起作用。