【发布时间】:2015-08-19 23:57:34
【问题描述】:
我想将 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 之间)。如何进行正确的转换?我还需要什么其他东西吗?
这是一个盒子,我按顶点位置为它着色。
【问题讨论】:
-
您必须在应用旋转之前将其中心平移到原点,然后再平移回来。您已经完成了这一点,但是您的操作是无序的。
scale * -trans_center * rotation * trans_center应该可以工作。现在mvp似乎只是一个比例矩阵,你把它上面的平移 1 行扔掉了。
标签: opengl