




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、光線跟蹤算法主要內(nèi)容:一、實驗設(shè)計二、靜止多光源實現(xiàn)三、材料屬性對光照效果的影響四、移動光源的實現(xiàn)實驗設(shè)計問題一、影響光照效果的因素?問題二、OPENGL光線跟蹤函數(shù)的函數(shù)?問題三、光線跟蹤實現(xiàn)的基本步驟?一、OPENGL中影響光照效果的因素?1、光源光的種類:環(huán)境光:light_ambient 散射光:light_diffuse 鏡面光:light_specular光源的分類:方向性光源:無限遠,所有光線是平行的位置性光源:位置決定場景中的效果區(qū)別:GLfloat light_position 中的第四個參數(shù)2、材料屬性材料的環(huán)境顏色:GL_AMBIENT材料的散射顏色:GL_DIFFUSE
2、材料的鏡面顏色:GL_SPECULAR 材料的鏡面指數(shù):GL_SHININESS材料的發(fā)射顏色:GL_EMISSION問題二、OPENGL光線跟蹤函數(shù)的函數(shù)?光源:void glLightif(GLenum light, GLenum pname, TYPEparam);void glLightifv(GLenum light, GLenum pname, TYPE *param);Light:指定光源 pname:光源屬性 param:屬性值材料屬性:void glMaterialif(GLenum face, GLenum pname, TYPEparam);void glMaterial
3、ifv(GLenum face, GLenum pname, TYPE *param);Face:那個面受光照 pname:光源屬性 param:屬性值問題三、光線跟蹤實現(xiàn)的基本步驟?一、創(chuàng)建光源二、選擇光照模型三、定義材料屬性有了這些知識,我們就可以進行第一個簡單的多光源實驗。靜止多光源實現(xiàn)自己的工作:按照光線跟蹤實現(xiàn)的步驟進行。設(shè)置光源參數(shù),衰減因子,聚光燈參數(shù),材料屬性參數(shù),調(diào)用glLightfv,glMaterialfv, glEnable等函數(shù)進行設(shè)置。已有的:實現(xiàn)靜態(tài)光源顯示void reshape (int w, int h)void display(void)創(chuàng)建光源1、設(shè)置光
4、源參數(shù)方向性光源,環(huán)境光顏色為藍色GLfloat light_ambient = 0.0, 0.0, 1.0, 1.0 ;GLfloat light_diffuse = 1.0, 1.0, 1.0, 1.0 ;GLfloat light_specular = 1.0, 1.0, 1.0, 1.0 ;GLfloat light_position = 1.0, 1.0, 1.0, 0.0 ;位置性光源,環(huán)境光和散射光顏色為紅色GLfloat light1_ambient = 1.0, 0.0, 0.0, 1.0 ;GLfloat light1_diffuse = 1.0, 0.0, 0.0, 1.
5、0 ;GLfloat light1_specular = 1.0, 1.0, 1.0, 1.0 ;GLfloat light1_position = 0.0, 2.0, 2.0, 1.0 ;2、衰減因子定義衰減因子目的:增強真實效果glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, 2.0);glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, 1.0);glLightf(GL_LIGHT0, GL_QUADRATIC_ATTENUATION, 0.5);glLightf(GL_LIGHT1, GL_CONSTANT_ATT
6、ENUATION, 1.5);glLightf(GL_LIGHT1, GL_LINEAR_ATTENUATION, 0.5);glLightf(GL_LIGHT1, GL_QUADRATIC_ATTENUATION, 0.2);三個參數(shù)的默認值為1,0,03,聚光燈參數(shù)光源LIGHT1GLfloat spot_direction = 1.0, -1.0, -1.0 ;glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, spot_direction);glLightf(GL_LIGHT1, GL_SPOT_CUTOFF, 45.0);/默認值180glLightf(G
7、L_LIGHT1, GL_SPOT_EXPONENT, 5.0);/用于控制光的集中度,越高強度越集中4,glLightfv的調(diào)用 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); glLightfv(GL_LIGHT1, GL_AMBIENT, l
8、ight1_ambient); glLightfv(GL_LIGHT1, GL_DIFFUSE, light1_diffuse); glLightfv(GL_LIGHT1, GL_SPECULAR, light1_specular); glLightfv(GL_LIGHT1, GL_POSITION, light1_position); 5,glEnable的調(diào)用作用:啟用光源 glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_LIGHT1);6,光源保持靜止void reshape (int w, int h) glViewpor
9、t (0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode (GL_PROJECTION); glLoadIdentity(); if (w = h) glOrtho (-1.5, 1.5, 1.5*(GLfloat)h/(GLfloat)w, 1.5*(GLfloat)h/(GLfloat)w, -10.0, 10.0); else glOrtho (-1.5*(GLfloat)w/(GLfloat)h,1.5*(GLfloat)w/(GLfloat)h, -1.5, 1.5, -10.0, 10.0); glMatrixMode(GL_MODELVIE
10、W); glLoadIdentity();首先確定視口和投影矩陣,接著在模型視圖矩陣中加載單位矩陣,然后再設(shè)置光源。由于使用單位陣,乘模型視圖矩陣之后原來制定的光源位置并沒有發(fā)生變化。選擇光照模型靜態(tài)多光源實現(xiàn)過程中使用默認設(shè)置:即觀察者位于無窮遠且只有一面接受光照 glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_FALSE);定義材料屬性材料屬性
11、值設(shè)置GLfloat mat_specular = 1.0, 1.0, 1.0, 1.0 ;GLfloat mat_shininess = 50.0 ;glMaterialfv的調(diào)用glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);display()函數(shù)void display(void) glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);/清空緩沖區(qū) glutSolidSphere (1
12、.0, 20, 16);/畫圓,半徑為1.0 glFlush ();/保證繪圖命令被實際執(zhí)行效果展示屏蔽位置性光源只有方向性光源屏蔽方向性光源只有位置性光源靜止多光源材料屬性對光照效果的影響遇到的問題:如何將不同的材料屬性賦予不同的球體?如何將不同的材料屬性賦予不同的球體?猜測可以通過調(diào)用glTranslatef()來實現(xiàn)查閱發(fā)現(xiàn): glPushMatrix(); glTranslatef (); glMaterialfv(); glutSolidSphere(); glPopMatrix();創(chuàng)建光源/環(huán)境光,散射光和鏡面光參數(shù)GLfloat light_ambient = 0.0, 0.0
13、, 1.0, 1.0 ;GLfloat light_diffuse = 1.0, 1.0, 1.0, 1.0 ;GLfloat light_specular = 1.0, 1.0, 1.0, 1.0 ;GLfloat light_position = 1.0, 1.0, 1.0, 0.0 ; /glLightfv的調(diào)用glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);glLightfv(GL_LIGHT0, GL_SPECULAR, light_spec
14、ular);glLightfv(GL_LIGHT0, GL_POSITION, light_position);/glEnable的調(diào)用glEnable(GL_DEPTH_TEST);glEnable(GL_LIGHTING);glEnable(GL_LIGHT0); 材料屬性值設(shè)置 GLfloat no_mat = 0.0, 0.0, 0.0, 1.0 ; GLfloat mat_ambient = 0.7, 0.7, 0.7, 1.0 ; GLfloat mat_diffuse = 0.1, 0.5, 0.8, 1.0 ; GLfloat mat_specular = 1.0, 1.0,
15、1.0, 1.0 ; GLfloat no_shininess = 0.0 ; GLfloat low_shininess = 5.0 ; GLfloat high_shininess = 100.0 ; GLfloat mat_emission = 0.3, 0.2, 0.2, 0.0;glMaterialfv的調(diào)用 第一個球:只有散射顏色和發(fā)射顏色 glPushMatrix(); glTranslatef (-1.0, -0.5, -2.0); glMaterialfv(GL_FRONT, GL_AMBIENT, no_mat); glMaterialfv(GL_FRONT, GL_DIF
16、FUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat); glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess); glMaterialfv(GL_FRONT, GL_EMISSION, mat_emission); glutSolidSphere(1.0, 16, 16);/繪制小球 glPopMatrix();第二個球:只有散射顏色和鏡面顏色,且鏡面指數(shù)低 glPushMatrix(); glTranslatef (0.0, -0.5, -3.0); glMaterialf
17、v(GL_FRONT, GL_AMBIENT, no_mat); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_SHININESS, low_shininess); glMaterialfv(GL_FRONT, GL_EMISSION, no_mat); glutSolidSphere(1.0, 16, 16); glPopMatrix();第三個球:只有散射顏色和鏡面顏色,且鏡面指數(shù)為高
18、glPushMatrix(); glTranslatef (1.0, -0.5, -4.0); glMaterialfv(GL_FRONT, GL_AMBIENT, no_mat); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess); glMaterialfv(GL_FRONT, GL_EMISSION, no_mat); glutSolid
19、Sphere(1.0, 16, 16); glPopMatrix();靜態(tài)光源控制void reshape (int w, int h) glViewport (0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode (GL_PROJECTION); glLoadIdentity(); if (w = h) glOrtho (-1.5, 1.5,- 1.5*(GLfloat)h/(GLfloat)w,1.5*(GLfloat)h/(GLfloat)w, -10.0, 10.0); else glOrtho (-1.5*(GLfloat)w/(GLfloat)
20、h,1.5*(GLfloat)w/(GLfloat)h, -1.5, 1.5, -10.0, 10.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity();效果展示第一個小球只有散射顏色和發(fā)射顏色第二個小球只有散射顏色和鏡面顏色,且鏡面指數(shù)低 第三個小球只有散射顏色和鏡面顏色,且鏡面指數(shù)為高動態(tài)光源實現(xiàn)采用什么方式實現(xiàn)動態(tài)光源?通過點擊鼠標產(chǎn)生鼠標事件,進而移動光源鼠標事件函數(shù),目的通過點擊鼠標控制旋轉(zhuǎn)void mouse(int button, int state, int x, int y) switch (button) case GLUT_LE
21、FT_BUTTON: if (state = GLUT_DOWN) spin = (spin + 30) % 360; /全局變量spin的控制 glutPostRedisplay(); break; default: break; void display3(void) /模型和視圖變換 GLfloat position = 0.0, 0.0, 1.5, 1.0 ; glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix (); glTranslatef (0.0, 0.0, -5.0); glPushMatrix
22、(); glRotated (GLdouble) spin, 1.0, 0.0, 0.0); /全局變量spin初值為0,通過鼠標事件改變它的值,進而進行旋轉(zhuǎn) glLightfv (GL_LIGHT0, GL_POSITION, position); glTranslated (0.0, 0.0, 1.5); glDisable (GL_LIGHTING); glColor3f (0.0, 1.0, 1.0); glutWireCube (0.1); /繪制立方體函數(shù),目的是為了更好的顯示效果 glEnable (GL_LIGHTING); glPopMatrix (); glutSolidS
23、phere (1.0, 20, 16);/繪制圓 glPopMatrix (); glFlush ();void reshape3 (int w, int h)/投影和視口變換 glViewport (0, 0, (GLsizei) w, (GLsizei) h); /作用調(diào)整繪圖像素矩陣,使它占據(jù)整個窗口 glMatrixMode (GL_PROJECTION); /表示吧當前矩陣指定用于投影變換,后續(xù)的變換調(diào)用影響的是投影矩陣 glLoadIdentity();/對當前矩陣進行初始化 gluPerspective(40.0, (GLfloat) w/(GLfloat) h, 1.0, 20
24、.0); /*void gluPerspective(GLdouble fovy, GLdouble aspect,GLdouble near, GLdouble far); 創(chuàng)建一個表示對稱透視視圖憑借頭體的矩陣,并把它與當前矩陣相乘 fovy yz平面上視野的角度,它的值必須在0.0,180.0. aspect是這個平截頭體的縱橫比,即寬度除高度 near and far 觀察點與近側(cè)剪裁平面及遠側(cè)裁剪平面的距離,值為正數(shù)*/ glMatrixMode(GL_MODELVIEW); /以后變換影響的是模型視圖矩陣 glLoadIdentity();/對當前矩陣進行初始化效果展示光源在上面時光源在下側(cè)時main()的實現(xiàn)int main(int argc, char* argv) /初始化 glutInit(&argc, argv); glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_D
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 專題3.1 導(dǎo)數(shù)的概念及其意義、導(dǎo)數(shù)的運算(原卷版)-2024年高考數(shù)學一輪復(fù)習精講精練寶典(新高考專用)
- 2020-2021深圳華南中英文學校小學三年級數(shù)學下期末一模試卷及答案
- 《跨境電子商務(wù)基礎(chǔ)》高職全套教學課件
- 內(nèi)墻腳手架施工方案
- 歷史與社會人教版九年級第三單元第二課第一框《歐洲戰(zhàn)爭策源地的形成》教學設(shè)計
- 江西省景德鎮(zhèn)市2025屆中考考前最后一卷生物試卷含解析
- 安徽省宣城市培訓(xùn)校2025屆中考生物模擬預(yù)測題含解析
- 農(nóng)場員工合同范例
- 供電施工合同范例
- 企業(yè)產(chǎn)權(quán)房出租合同范例
- 2024年支氣管哮喘臨床診療指南:課件精講
- 模具費支付合同模板
- 餐飲部總監(jiān)述職報告
- 遼寧省沈陽市第七中學2024-2025學年九年級上學期期中英語試題
- 小學金融普及
- 2024電力建設(shè)工程綠色建造評價規(guī)范
- 安寧療護課件
- 中小學-珍愛生命拒絕毒品-課件
- 價值觀考核評定表
- 振動篩施工技術(shù)方案
- 急救藥品課件教學課件
評論
0/150
提交評論