我是新手开放式的,我需要帮助一个三角形动画,该三角形每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年。
改为学习现代opengl。
尽管问题还不清楚,但我会尝试为您提供所需的信息。
push/pop矩阵:
glpushmatrix():
每个矩阵模式都有一堆矩阵。在GL_ModelView模式下,堆栈深度至少为32。在其他模式下,GL_COLOR,GL_PRODOVITION和GL_TEXTURE,深度至少为2。在任何模式下的当前矩阵都是该模式堆栈顶部的矩阵。
glpushmatrix将当前的矩阵堆叠向下推一个,重复了当前矩阵。也就是说,在glpushmatrix调用后,堆栈顶部的矩阵与下面的矩阵相同。
glpopmatrix弹出当前矩阵堆栈,用堆栈上下面的矩阵代替当前矩阵。
最初,每个堆栈都包含一个矩阵,一个身份矩阵。
旋转:
要旋转当前矩阵,请致电glrotate()。
颜色:
使用这些选择渲染颜色。
通常使用glColor3f()
或glColor4f()
。
您的方案:
- 致电
glColor3f()
或glColor4f()
选择渲染颜色。 - 致电
glPushMatrix()
避免旋转所有内容。 - 致电
glRotate()
旋转矩阵。 - 渲染网格。
- 致电
glPopMatrix()
恢复旋转的矩阵。
要修改每个时间单元:
随着时间的推移,将发送到GL函数的数据修改。增加每个帧的旋转/颜色值。
我建议阅读矩阵数学,以及图形如何包含此。