




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、光線跟蹤算法第1頁,共38頁,2022年,5月20日,5點(diǎn)4分,星期一實(shí)驗(yàn)設(shè)計(jì)問題一、影響光照效果的因素?問題二、OPENGL光線跟蹤函數(shù)的函數(shù)?問題三、光線跟蹤實(shí)現(xiàn)的基本步驟?第2頁,共38頁,2022年,5月20日,5點(diǎn)4分,星期一一、OPENGL中影響光照效果的因素?1、光源光的種類:環(huán)境光:light_ambient 散射光:light_diffuse 鏡面光:light_specular光源的分類:方向性光源:無限遠(yuǎn),所有光線是平行的位置性光源:位置決定場景中的效果區(qū)別:GLfloat light_position 中的第四個(gè)參數(shù)第3頁,共38頁,2022年,5月20日,5點(diǎn)4分,星
2、期一2、材料屬性材料的環(huán)境顏色:GL_AMBIENT材料的散射顏色:GL_DIFFUSE材料的鏡面顏色:GL_SPECULAR 材料的鏡面指數(shù):GL_SHININESS材料的發(fā)射顏色:GL_EMISSION第4頁,共38頁,2022年,5月20日,5點(diǎn)4分,星期一問題二、OPENGL光線跟蹤函數(shù)的函數(shù)?光源:void glLightif(GLenum light, GLenum pname, TYPEparam);void glLightifv(GLenum light, GLenum pname, TYPE *param);Light:指定光源 pname:光源屬性 param:屬性值材料屬
3、性:void glMaterialif(GLenum face, GLenum pname, TYPEparam);void glMaterialifv(GLenum face, GLenum pname, TYPE *param);Face:那個(gè)面受光照 pname:光源屬性 param:屬性值第5頁,共38頁,2022年,5月20日,5點(diǎn)4分,星期一問題三、光線跟蹤實(shí)現(xiàn)的基本步驟?一、創(chuàng)建光源二、選擇光照模型三、定義材料屬性有了這些知識,我們就可以進(jìn)行第一個(gè)簡單的多光源實(shí)驗(yàn)。第6頁,共38頁,2022年,5月20日,5點(diǎn)4分,星期一靜止多光源實(shí)現(xiàn)自己的工作:按照光線跟蹤實(shí)現(xiàn)的步驟進(jìn)行。設(shè)置
4、光源參數(shù),衰減因子,聚光燈參數(shù),材料屬性參數(shù),調(diào)用glLightfv,glMaterialfv, glEnable等函數(shù)進(jìn)行設(shè)置。已有的:實(shí)現(xiàn)靜態(tài)光源顯示void reshape (int w, int h)void display(void)第7頁,共38頁,2022年,5月20日,5點(diǎn)4分,星期一創(chuàng)建光源1、設(shè)置光源參數(shù)方向性光源,環(huán)境光顏色為藍(lá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,
5、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.0 ;GLfloat light1_specular = 1.0, 1.0, 1.0, 1.0 ;GLfloat light1_position = 0.0, 2.0, 2.0, 1.0 ;第8頁,共38頁,2022年,5月20日,5點(diǎn)4分,星期一2、衰減因子定義衰減因子目的:增
6、強(qiáng)真實(shí)效果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_ATTENUATION, 1.5);glLightf(GL_LIGHT1, GL_LINEAR_ATTENUATION, 0.5);glLightf(GL_LIGHT1, GL_QUADRATIC_ATTENUATION, 0.
7、2);三個(gè)參數(shù)的默認(rèn)值為1,0,0第9頁,共38頁,2022年,5月20日,5點(diǎn)4分,星期一3,聚光燈參數(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);/默認(rèn)值180glLightf(GL_LIGHT1, GL_SPOT_EXPONENT, 5.0);/用于控制光的集中度,越高強(qiáng)度越集中第10頁,共38頁,2022年,5月20日,5點(diǎn)4分,星期一4
8、,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, light1_ambient); glLightfv(GL_LIGHT1, GL_DIFFUSE, lig
9、ht1_diffuse); glLightfv(GL_LIGHT1, GL_SPECULAR, light1_specular); glLightfv(GL_LIGHT1, GL_POSITION, light1_position); 第11頁,共38頁,2022年,5月20日,5點(diǎn)4分,星期一5,glEnable的調(diào)用作用:啟用光源 glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_LIGHT1);第12頁,共38頁,2022年,5月20日,5點(diǎn)4分,星期一6,光源保持靜止void reshape (int w, int h) g
10、lViewport (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_
11、MODELVIEW); glLoadIdentity();首先確定視口和投影矩陣,接著在模型視圖矩陣中加載單位矩陣,然后再設(shè)置光源。由于使用單位陣,乘模型視圖矩陣之后原來制定的光源位置并沒有發(fā)生變化。第13頁,共38頁,2022年,5月20日,5點(diǎn)4分,星期一選擇光照模型靜態(tài)多光源實(shí)現(xiàn)過程中使用默認(rèn)設(shè)置:即觀察者位于無窮遠(yuǎn)且只有一面接受光照 glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);glLightModeli(GL_LIGHT_MO
12、DEL_LOCAL_VIEWER, GL_FALSE);第14頁,共38頁,2022年,5月20日,5點(diǎn)4分,星期一定義材料屬性材料屬性值設(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);第15頁,共38頁,2022年,5月20日,5點(diǎn)4分,星期一display()
13、函數(shù)void display(void) glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);/清空緩沖區(qū) glutSolidSphere (1.0, 20, 16);/畫圓,半徑為1.0 glFlush ();/保證繪圖命令被實(shí)際執(zhí)行第16頁,共38頁,2022年,5月20日,5點(diǎn)4分,星期一效果展示屏蔽位置性光源只有方向性光源第17頁,共38頁,2022年,5月20日,5點(diǎn)4分,星期一屏蔽方向性光源只有位置性光源第18頁,共38頁,2022年,5月20日,5點(diǎn)4分,星期一靜止多光源第19頁,共38頁,2022年,5月20日,5點(diǎn)4分,星期
14、一材料屬性對光照效果的影響遇到的問題:如何將不同的材料屬性賦予不同的球體?第20頁,共38頁,2022年,5月20日,5點(diǎn)4分,星期一如何將不同的材料屬性賦予不同的球體?猜測可以通過調(diào)用glTranslatef()來實(shí)現(xiàn)查閱發(fā)現(xiàn): glPushMatrix(); glTranslatef (); glMaterialfv(); glutSolidSphere(); glPopMatrix();第21頁,共38頁,2022年,5月20日,5點(diǎn)4分,星期一創(chuàng)建光源/環(huán)境光,散射光和鏡面光參數(shù)GLfloat light_ambient = 0.0, 0.0, 1.0, 1.0 ;GLfloat li
15、ght_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_specular);glLightfv(GL_LIG
16、HT0, GL_POSITION, light_position);/glEnable的調(diào)用glEnable(GL_DEPTH_TEST);glEnable(GL_LIGHTING);glEnable(GL_LIGHT0);第22頁,共38頁,2022年,5月20日,5點(diǎn)4分,星期一 材料屬性值設(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.
17、0, 1.0, 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;第23頁,共38頁,2022年,5月20日,5點(diǎn)4分,星期一glMaterialfv的調(diào)用 第一個(gè)球:只有散射顏色和發(fā)射顏色 glPushMatrix(); glTranslatef (-1.0, -0.5, -2.0); glMaterialfv(GL_FRONT, GL_AMBIENT,
18、no_mat); glMaterialfv(GL_FRONT, GL_DIFFUSE, 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();第24頁,共38頁,2022年,5月20日,5點(diǎn)4分,星期一第二個(gè)球:只有散射顏色和鏡面顏
19、色,且鏡面指數(shù)低 glPushMatrix(); glTranslatef (0.0, -0.5, -3.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, low_shininess); glMaterialfv(GL_FRONT, GL_EMISSION, no_mat); g
20、lutSolidSphere(1.0, 16, 16); glPopMatrix();第25頁,共38頁,2022年,5月20日,5點(diǎn)4分,星期一第三個(gè)球:只有散射顏色和鏡面顏色,且鏡面指數(shù)為高 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); glMaterial
21、fv(GL_FRONT, GL_SHININESS, high_shininess); glMaterialfv(GL_FRONT, GL_EMISSION, no_mat); glutSolidSphere(1.0, 16, 16); glPopMatrix();第26頁,共38頁,2022年,5月20日,5點(diǎn)4分,星期一靜態(tài)光源控制void reshape (int w, int h) glViewport (0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode (GL_PROJECTION); glLoadIdentity(); if (w = h)
22、 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_MODELVIEW); glLoadIdentity();第27頁,共38頁,2022年,5月20日,5點(diǎn)4分,星期一效果展示第一個(gè)小球只有散射顏色和發(fā)射顏色第二個(gè)小球只有散射顏色和鏡面顏色,且鏡面指數(shù)低
23、 第三個(gè)小球只有散射顏色和鏡面顏色,且鏡面指數(shù)為高第28頁,共38頁,2022年,5月20日,5點(diǎn)4分,星期一動(dòng)態(tài)光源實(shí)現(xiàn)采用什么方式實(shí)現(xiàn)動(dòng)態(tài)光源?通過點(diǎn)擊鼠標(biāo)產(chǎn)生鼠標(biāo)事件,進(jìn)而移動(dòng)光源第29頁,共38頁,2022年,5月20日,5點(diǎn)4分,星期一鼠標(biāo)事件函數(shù),目的通過點(diǎn)擊鼠標(biāo)控制旋轉(zhuǎn)void mouse(int button, int state, int x, int y) switch (button) case GLUT_LEFT_BUTTON: if (state = GLUT_DOWN) spin = (spin + 30) % 360; /全局變量spin的控制 glutPostR
24、edisplay(); break; default: break; 第30頁,共38頁,2022年,5月20日,5點(diǎn)4分,星期一 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 (); glRotated (GLdouble) spin, 1.0, 0.0, 0.0); /全局變
25、量spin初值為0,通過鼠標(biāo)事件改變它的值,進(jìn)而進(jìn)行旋轉(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 (); glutSolidSphere (1.0, 20, 16);/繪制圓 glPopMatrix (); glFlush ()
26、;第31頁,共38頁,2022年,5月20日,5點(diǎn)4分,星期一void reshape3 (int w, int h)/投影和視口變換 glViewport (0, 0, (GLsizei) w, (GLsizei) h); /作用調(diào)整繪圖像素矩陣,使它占據(jù)整個(gè)窗口 glMatrixMode (GL_PROJECTION); /表示吧當(dāng)前矩陣指定用于投影變換,后續(xù)的變換調(diào)用影響的是投影矩陣 glLoadIdentity();/對當(dāng)前矩陣進(jìn)行初始化 gluPerspective(40.0, (GLfloat) w/(GLfloat) h, 1.0, 20.0); /*void gluPerspe
27、ctive(GLdouble fovy, GLdouble aspect,GLdouble near, GLdouble far); 創(chuàng)建一個(gè)表示對稱透視視圖憑借頭體的矩陣,并把它與當(dāng)前矩陣相乘 fovy yz平面上視野的角度,它的值必須在0.0,180.0. aspect是這個(gè)平截頭體的縱橫比,即寬度除高度 near and far 觀察點(diǎn)與近側(cè)剪裁平面及遠(yuǎn)側(cè)裁剪平面的距離,值為正數(shù)*/ glMatrixMode(GL_MODELVIEW); /以后變換影響的是模型視圖矩陣 glLoadIdentity();/對當(dāng)前矩陣進(jìn)行初始化第32頁,共38頁,2022年,5月20日,5點(diǎn)4分,星期一效果展示光源在上面時(shí)第33頁,共38頁,2022年,5月20日,5點(diǎn)4分,星期一光源在下側(cè)時(shí)第34頁,共38頁,2022年,5月20日,5點(diǎn)4分,星期一main()的實(shí)現(xiàn)int main(int argc, char* argv) /初始化 glutInit(&argc, argv); glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPT
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 與秋天有關(guān)的成語課件
- 不等式課件教學(xué)課件
- 云南師范大學(xué)《環(huán)境導(dǎo)視系統(tǒng)設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 上海工商外國語職業(yè)學(xué)院《聲學(xué)基礎(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 邵陽職業(yè)技術(shù)學(xué)院《向量微積分》2023-2024學(xué)年第一學(xué)期期末試卷
- 內(nèi)蒙古包頭市青山區(qū)2025年初三年級校內(nèi)模擬物理試題試卷(最后一卷)含解析
- 下載馬工程配套課件
- 江南影視藝術(shù)職業(yè)學(xué)院《從分子觀點(diǎn)了解生物學(xué):結(jié)構(gòu)生物學(xué)簡介》2023-2024學(xué)年第二學(xué)期期末試卷
- 遼源職業(yè)技術(shù)學(xué)院《藥物分析化學(xué)實(shí)驗(yàn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 江西省撫州市南城縣第一中學(xué)2025年高三下學(xué)期期中聯(lián)考物理試題理試題含解析
- 【人教版】《勞動(dòng)教育》五上 勞動(dòng)項(xiàng)目三《制作扇子》 課件
- 北師大版二年級下冊數(shù)學(xué)期中考試試卷
- 高速公路路基及土石方工程施工方案與技術(shù)措施
- 《形形色色的分子、價(jià)層電子對互斥理論》名師課件1
- 中國科學(xué)院沈陽自動(dòng)化研究所簡介
- 2024年中華人民共和國企業(yè)所得稅年度納稅申報(bào)表(帶公式)20240301更新
- 3貨物接取送達(dá)運(yùn)輸協(xié)議
- 海洋牧場原理與技術(shù)智慧樹知到期末考試答案章節(jié)答案2024年魯東大學(xué)
- 商業(yè)綜合體物業(yè)管理服務(wù)標(biāo)準(zhǔn)
- 公司個(gè)人現(xiàn)實(shí)表現(xiàn)材料
- 2024年浙江杭州市林水局所屬事業(yè)單位招聘擬聘人員招聘歷年高頻考題難、易錯(cuò)點(diǎn)模擬試題(共500題)附帶答案詳解
評論
0/150
提交評論