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