glm 正交旋转 space

glm rotation in ortho space

我这样设置正射投影:

transform = glm::ortho(0.0f, width, height, 0.0f);

这很好用,但是当我想像这样使用 glm::rotate 函数时:

transform = glm::rotate(transform, glm::radians(45.0f), glm::vec3(0, 0, 1));

我的对象围绕 0 : 0 : 0 旋转。

我的顶点是这样的:

GLfloat vertices[] = {
    600, 100, 0,
    612, 100, 0,
    612, 130, 0,
    600, 130, 0
};

如何让我的对象围绕其中心旋转?

如果你想围绕它的中心旋转,你必须:

  • 平移对象,使对象的中心移动到 (0, 0)。
  • 旋转对象。
  • 移动对象,使中心点在其原始位置移动。
GLfloat center_x = 606.0f;
GLfloat center_y = 115.0f;

transform = glm::translate(transform, glm::vec3(center_x, center_y, 0));
transform = glm::rotate(transform, glm::radians(45.0f), glm::vec3(0, 0, 1));
transform = glm::translate(transform, glm::vec3(-center_x, -center_y, 0));

另见