我用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()
之间包含所有代码,则旋转对象,但围绕窗口的中心。如何只旋转我绘制的对象?
答案 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。