旋转使用 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 对象的主要内容,如果未能解决你的问题,请参考以下文章

使用 OpenGL 固定功能旋转和平移 2D 图像

使用 OpenGL ES 2.0 绘制 2D 图像

围绕对象中心的 2d OpenGL 旋转

open gl 到底是个啥东西啊

在画布上绘制一个旋转的 Path2D 对象

按纵横比拉伸的 OpenGL 2D 投影