Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 旋转三角形&;在opengl中更改其颜色_C++_Opengl - Fatal编程技术网

C++ 旋转三角形&;在opengl中更改其颜色

C++ 旋转三角形&;在opengl中更改其颜色,c++,opengl,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);

我是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;
}

这种使用OpenGL的方式已被弃用。

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

而是学习

虽然这个问题很不清楚,我会尽量给你你需要的信息

推送/弹出矩阵:

:

每个矩阵模式都有一组矩阵。在GL_MODELVIEW模式下,堆栈深度至少为32。在其他模式(GL_颜色、GL_投影和GL_纹理)中,深度至少为2。任何模式下的当前矩阵都是该模式堆栈顶部的矩阵

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

glPopMatrix弹出当前矩阵堆栈,将当前矩阵替换为堆栈上其下方的矩阵

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

旋转:

要旋转当前矩阵,请调用

颜色:

用于选择渲染颜色

通常使用
glColor3f()
glColor4f()

您的场景:

  • 调用
    glColor3f()
    glColor4f()
    选择渲染颜色
  • 调用
    glPushMatrix()
  • 调用
    glRotate()
    旋转矩阵
  • 渲染网格
  • 调用
    glPopMatrix()
  • 按时间单位修改:

    只需修改随时间发送到GL函数的数据。每帧增加一点旋转/颜色值


    我建议阅读矩阵数学,以及图形如何将其结合起来。

    你的问题是什么?此外,你应该学习使用着色器的现代OpenGL。