今天進度開始前:
1.期中考:
考OpenGL必背的11個函式
2.複習上週內容
今天進度:打光
- 複製上週程式碼
- 改程式碼(畫重點的地方與上週不同要注意)
- 讓他可以讀多一點圖
GLuint id1, id2; //增加2個 貼圖IDint myTexture(char * filename){IplImage * img = cvLoadImage(filename); ///OpenCV讀圖cvCvtColor(img,img, CV_BGR2RGB); ///OpenCV轉色彩 (需要cv.h)glEnable(GL_TEXTURE_2D); ///1. 開啟貼圖功能GLuint id; ///準備一個 unsigned int 整數, 叫 貼圖IDglGenTextures(1, &id); /// 產生Generate 貼圖IDglBindTexture(GL_TEXTURE_2D, id); ///綁定bind 貼圖IDglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);/// 貼圖參數, 超過包裝的範圖T, 就重覆貼圖glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);/// 貼圖參數, 超過包裝的範圖S, 就重覆貼圖glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);/// 貼圖參數, 放大時的內插, 用最近點glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);/// 貼圖參數, 縮小時的內插, 用最近點glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img->width, img->height, 0, GL_RGB, GL_UNSIGNED_BYTE, img->imageData);return id;}void display(){glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glBindTexture(GL_TEXTURE_2D, id1);//讓他可以切換圖片glutSolidTeapot(0.3);glBindTexture(GL_TEXTURE_2D, id2);//讓他可以切換圖片glBegin(GL_POLYGON);glTexCoord2f( 0, 0 ); glVertex2f( -1, -1 );glTexCoord2f( 0, -1 ); glVertex2f( -1, +1 );glTexCoord2f( 1, -1 ); glVertex2f( +1, +1 );glTexCoord2f( 1, 0 ); glVertex2f( +1, -1 );glEnd();glutSwapBuffers();}int main(int argc, char** argv){glutInit( &argc, argv );glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );glutCreateWindow(" Week08 ");glutDisplayFunc(display);id1 = myTexture("one.png");id2 = myTexture("Grey.jpg");glEnable(GL_DEPTH_TEST);//開啟深度測試讓他可以變成3DglutMainLoop();}
- 貼上打光的陣列,放在Main前面
const GLfloat light_ambient[] = { 0.0f, 0.0f, 0.0f, 1.0f };const GLfloat light_diffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f };const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };const GLfloat light_position[] = { 2.0f, 5.0f, -5.0f, 0.0f };const GLfloat mat_ambient[] = { 0.7f, 0.7f, 0.7f, 1.0f };const GLfloat mat_diffuse[] = { 0.8f, 0.8f, 0.8f, 1.0f };const GLfloat mat_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };const GLfloat high_shininess[] = { 100.0f };
- 貼打光的設定,放在MainLoop前面
glEnable(GL_LIGHT0);glEnable(GL_NORMALIZE);glEnable(GL_COLOR_MATERIAL);glEnable(GL_LIGHTING);glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);glLightfv(GL_LIGHT0, GL_POSITION, light_position);glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);
執行結果:出現光影效果
沒有留言:
張貼留言