旋转三角形&在opengl中改变它的颜色

时间:2016-12-13 12:19:35

标签: c++ opengl

我是openGL的新手,我需要帮助设置一个每25毫秒旋转1度的三角形动画。我想对这个三角形进行编程,逐渐将颜色从蓝色变为绿色再变为红色。

float rAngle=0.0;

void handleResize(int w,int h)
{
   glViewport(0,0,w,h);
   glMatrixMode(GL_PROJECTION);
   glLoadIdentity();
   gluPerspective(45.0,(double)w/(double)h,1.0,200.0);
}

void drawscene()
{
   glColor3f(0.0f,1.0f,0.0f);
   glClear(GL_COLOR_BUFFER_BIT);
   glMatrixMode(GL_MODELVIEW);
   glLoadIdentity();
   glRotatef(-rAngle,0.0f,0.0f,0.1f);
   glBegin(GL_TRIANGLES);
   glVertex3f(-0.5f,0.5f,-5.0f);
   glVertex3f(-1.0f,1.5f,-5.0f);
   glVertex3f(-1.5f,0.5f,-5.0f);
   glEnd();
   glFlush();
}
void update(int value)
{
    rAngle+=1.0f;
    glutPostRedisplay();
    glutTimerFunc(25,update,0);
}

int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
    glutInitWindowSize(500, 500);
    glutInitWindowPosition(0, 0);
    glutCreateWindow("OpenGL");
    glutDisplayFunc(drawscene);
    glutReshapeFunc(handleResize);
    glutTimerFunc(25,update,0);
    glutMainLoop();
    return 0;
}

1 个答案:

答案 0 :(得分:2)

不推荐使用这种使用OpenGL的方式。

首先我要指出,没有理由涉及旧的过时的OpenGL。立即模式已经被弃用了大约10年。

转而学习modern OpenGL

虽然问题非常清楚,但我会尝试为您提供所需的信息。

推/弹矩阵:

glPushMatrix()

  

每种矩阵模式都有一堆矩阵。在GL_MODELVIEW模式下,堆栈深度至少为32.在其他模式中,GL_COLOR,GL_PROJECTION和GL_TEXTURE,深度至少为2.任何模式下的当前矩阵都是该模式堆栈顶部的矩阵。

     

glPushMatrix将当前矩阵堆栈向下推,重复当前矩阵。也就是说,在glPushMatrix调用之后,堆栈顶部的矩阵与它下面的矩阵相同。

     

glPopMatrix弹出当前的矩阵堆栈,将当前矩阵替换为堆栈下面的矩阵。

     

最初,每个堆栈都包含一个矩阵,一个单位矩阵。

轮换:

要旋转当前矩阵,请拨打glRotate()

<强>颜色

使用these选择渲染颜色。

通常使用glColor3f()glColor4f()

您的方案:

  1. 致电glColor3f()glColor4f()选择渲染颜色。
  2. 致电glPushMatrix()以避免转动所有内容。
  3. 致电glRotate()以旋转矩阵。
  4. 渲染网格。
  5. 调用glPopMatrix()以恢复旋转的矩阵。
  6. 按时间单位修改:

    随着时间的推移,只需修改发送到GL功能的数据。每帧增加一点旋转/颜色值。

    我建议阅读矩阵数学,以及图形如何包含它。