【问题标题】:Transformation to center 3D object in OpenGL在 OpenGL 中转换为中心 3D 对象
【发布时间】: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


【解决方案1】:

我对 glm 不是很熟悉,但我猜你必须更新着色器中的矩阵。您可以使用 glUniformMatrix*(mvp, ...) 之类的函数来执行此操作。

当您操作要在着色器中使用的矩阵或其他变量时,您必须将此更新发送到您的着色器,否则不会有任何效果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多