【问题标题】:Rotating a 2D object drawn with OpenGL旋转使用 OpenGL 绘制的 2D 对象
【发布时间】: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() 之间的所有代码,则旋转对象,但围绕窗口中心。如何仅旋转我绘制的对象?

【问题讨论】:

    标签: c++ opengl graphics rotation


    【解决方案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)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    相关资源
    最近更新 更多