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

时间:2012-03-27 00:59:17

标签: c++ opengl graphics rotation

我用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 个答案:

答案 0 :(得分:4)

您正在通过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。