# week08
主題一:Week08 Light
今天的主題是打光。
打光範例:
1.至 jsyeh.org/3dcg10 下載windows.zip和data.zip,把解壓縮後的data資料夾放進解壓縮後的windows資料夾裡/打開Light & Material.exe範例
左下角可以切換material,左上角可以切換3D模型。
2.可以調整程式碼裡的數值,改變光的位置。
主題二:
實作程式碼:week08_light:要用程式碼寫出打光的效果。
上moodle下載freeglut,解壓縮放桌面,lib裡短的變更短(跟之前上課都一樣)
打開新GLUT專案,不要刪除原先的程式碼,複製到Notepad++取名為sample.cpp(要利用裡面的一些程式碼,做複製貼上。分別是打光的陣列&打光的函式)
在void display()前面宣告打光的陣列,把從sample.cpp裡偷的程式碼複製貼上。
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 };
在glutMainLoop()之前,把從sample.cpp裡偷來的打光函式複製貼上
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
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);
完成程式撰寫,輸出結果為:
因為打光的光線不是很明顯,我們要調整光的位置。
在打光陣列裡const GLfloat light_position[] = { 2.0f, 5.0f, -5.0f, 0.0f }(第三個正5,z的值改變至負5,改變打光的位置。)
在void display()裡加上glColor3f(1,1,0)把茶壺變成黃色,結果就會更漂亮了!
結果如下:
在glutCreateWindow("week08 Light");創建視窗前可以設定視窗的形式
glutInitWindowSize(300,300); 視窗的大小
glutInitWindowPosition(100,300); 視窗在螢幕上的顯示位置
在glutCreateWindow("week08 Light");創建視窗後,才可以執行OpenGL指令
glutMainLoop();主迴圈,程式可以繼續進行,不會結束。
介紹打光與Normal法向量之間的關係&介紹3D模型檔裡面的英文代表的意思。glNormal3f(nx,ny,nz)
期中模擬考系統:網址:jsyeh.org/gl/opengl_10_func.html1. glPushMatrix();//備份矩陣 (得到10分)
2. glTranslatef(x,y,z);//移動 (得到10分)
3. glRotatef(角度,x,y,z);//轉動 (得到10分)
4. glScalef(x,y,z);//放大縮小 (得到10分)
5. glBegin(GL_POLYGON);//開始畫 (得到10分)
6. glVertex3f(x,y,z);//頂點 (得到10分)
7. glColor3f(r,g,b);//色彩 (得到10分)
8. glTexCoord2f(tx,ty);//貼圖座標 (得到10分)
9. glNormal3f(nx,ny,nz);//打光的法向量 (得到10分)
10. glEnd();//結束畫
11. glPopMatrix();//還原矩陣 (得到10分)
沒有留言:
張貼留言