下载按说明挪下文件即可:下载地址
OpenGl是一个状态机,可以设置各种状态,然后这种状态会一直生效,直到再次修改他们。
glClearColor(0.0,0.0,0.0,0.0);
glClear(GL_COLOR_BUFFER_BIT);
glClear()中可选择参数。颜色缓冲区,深度缓冲区,累计缓冲区,模板缓冲区。
glShadeModel(GLenum mode);
设置着色模式,mode可选GL_SMOOTH或GL_FLAT。
后来查看是因为glut.h中包含了gl.h,glu.h,包含所有这三个文件没有必要;
而且glut.h要保证在gl.h,glu.h之前。为了保证GLUT程序的可移植性,glut.h包含后,就不要在包含gl.h,glu.h了。修改后无错误消失。
Some 函数:
两种着色模式:平滑着色与单调着色:
(1)平滑着色:glShadeModel(GL_SMOOTH)平滑着色可以实现一种颜色到另一种颜色的平滑渐变。
(2)单调着色:glShadeModel(GL_FLAT)单调着色即GL_FLAT,单调着色表示图元在内部不进行计算。一般而言,使用单调着色,图元的内部颜色就是最后一个项点所指定的颜色。唯一例外的是GL_POLYGON( 多边形 )图元,它的内部颜色是第一个顶点的颜色。
/*鸟笼*/
#include
int angle=1;
void init(void)
{
glClearColor(0.0, 0.0, 0.0, 0.0);
glShadeModel(GL_FLAT);
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0.0, 0.5, 0.5);
glPushMatrix();
glRotatef((GLfloat)angle, 0.0, 1.0, 0.0);
glPushMatrix();
glRotatef(90, 1.0, 0.0, 0.0);
glutWireCylinder(2.5, 5, 40, 5);
glPopMatrix();
glColor3f(0.0, 0.5, 0.5);
glPushMatrix();
glRotatef(-90, 1.0, 0.0, 0.0);//设置锥体角朝上
glutWireCone(2.5, 2.5, 40, 5);
glPopMatrix();
glColor3f(0.0, 0.5, 0.5);
glPushMatrix();
glRotatef(-90, 1.0, 0.0, 0.0);
glTranslatef(0.0, 0.0,2.5);
glScalef(0.1, 0.05, 1);
glutWireCube(2.0);
glPopMatrix();
glPopMatrix();
glutSwapBuffers();
}
void reshape(int w, int h)
{
glViewport(0, 0, (GLsizei)w, (GLsizei)h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(65.0, (GLfloat)w / (GLfloat)h, 1.0, 50.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.0, 0.0, -5.0);
gluLookAt(0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
}
void keyboard(unsigned char key, int x, int y)
{
switch (key) {
case 'r': /* 按r旋转 */
angle = (angle + 5) % 360;
glutPostRedisplay();
break;
default:
break;
}
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize(500, 500);
glutInitWindowPosition(100, 100);
glutCreateWindow(argv[0]);
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc(keyboard);
glutMainLoop();
return 0;
}