旋转使用 OpenGL 绘制的 2D 对象

Posted

技术标签:

【中文标题】旋转使用 OpenGL 绘制的 2D 对象【英文标题】:Rotating a 2D object drawn with OpenGL 【发布时间】:2012-03-27 00:59:16 【问题描述】:

我用 OpenGL 制作了一个花哨的形状,然后我用这个函数绘制了这个形状:

drawShape(const Point & center, char radius, int points, int rotation)

在函数内部,我有代码告诉 OpenGL 顶点在哪里:

glBegin(GL_LINE_LOOP);
  glColor3f(1.0, 1.0, 1.0);
  glVertex2f(center.getX() + 0.0, center.getY() + 1.0);
  // more vertices
glEnd();

现在当我添加glRotatef(rotation, 0.0, 0.0, 1.0) 时,我希望我绘制的这个形状可以在屏幕上旋转。但是,如果我将它添加到glBegin() 上方,它会旋转窗口中的所有内容。如果我包含glPushMatrix()glPopMatrix() 之间的所有代码,则旋转对象,但围绕窗口中心。如何仅旋转我绘制的对象?

【问题讨论】:

【参考方案1】:

通过将center.getX 等添加到值中,您正在完成 OpenGL 的工作。

你想要的是这个:

glPushMatrix();
glTranslatef(center.getX(), center.getY(), 0.0f);
glRotatef(rotation, 0.0, 0.0, 1.0);

glBegin(GL_LINE_LOOP);
  glColor3f(1.0, 1.0, 1.0);
  glVertex2f(0.0, 1.0);
  // more vertices
glEnd();

glPopMatrix();

您可以通过使用glScale 矩阵并在您的glVertex 调用中假设半径为1.0 来应用半径。

【讨论】:

另外我建议你学习使用顶点数组和顶点缓冲区对象,并取消立即模式(即不再使用glBegin...glEnd)。

以上是关于旋转使用 OpenGL 绘制的 2D 对象的主要内容,如果未能解决你的问题,请参考以下文章