OpenGL安裝
下載按說明挪下文件即可:下載地址
Tips
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<GL/freeglut.h>
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;
}