實(shí)驗(yàn) OpenGL光照_第1頁(yè)
實(shí)驗(yàn) OpenGL光照_第2頁(yè)
實(shí)驗(yàn) OpenGL光照_第3頁(yè)
實(shí)驗(yàn) OpenGL光照_第4頁(yè)
實(shí)驗(yàn) OpenGL光照_第5頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、實(shí)驗(yàn)7 OpenGL光照一、 實(shí)驗(yàn)?zāi)康牧私庹莆誒penGL程序的光照與材質(zhì),能正確使用光源與材質(zhì)函數(shù)設(shè)置所需的繪制效果。二、 實(shí)驗(yàn)內(nèi)容(1)下載并運(yùn)行Nate Robin教學(xué)程序包中的lightmaterial程序,試驗(yàn)不同的光照與材質(zhì)系數(shù);(2)運(yùn)行示范代碼1,了解光照與材質(zhì)函數(shù)使用。三、 實(shí)驗(yàn)原理為在場(chǎng)景中增加光照,需要執(zhí)行以下步驟:(1) 設(shè)置一個(gè)或多個(gè)光源,設(shè)定它的有關(guān)屬性;(2) 選擇一種光照模型;(3) 設(shè)置物體的材料屬性。具體見教材第8章8.6節(jié)用OpenGL生成真實(shí)感圖形的相關(guān)內(nèi)容。四、 實(shí)驗(yàn)代碼#include<GL/glut.h>#include<stdl

2、ib.h>static int year =0,day=0;void init(void)GLfloat mat_specular=1.0,1.0,1.0,1.0;GLfloat mat_shininess=50.0;GLfloat light_position=1.0,1.0,1.0,0.0;GLfloat white_light=1.0,1.0,1.0,1.0;GLfloat Light_Model_Ambient=0.2,0.2,0.2,1.0;glClearColor(0.0,0.0,0.0,0.0);glShadeModel(GL_SMOOTH);/glMaterialfv(材

3、質(zhì)指定,單值材質(zhì)參數(shù),具體指針);glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular);/鏡面反射光的反射系數(shù)glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess);/鏡面反射指數(shù)/glLightfv(光源,屬性名,屬性值); glLightfv(GL_LIGHT0, GL_POSITION, light_position); /光源位置 glLightfv(GL_LIGHT0, GL_DIFFUSE, white_light); /漫放射光分量強(qiáng)度 glLightfv(GL_LIGHT0, GL_SPECU

4、LAR, white_light); /折射光強(qiáng)度glLightModelfv(GL_LIGHT_MODEL_AMBIENT,Light_Model_Ambient);/光源2 GL_LIGHT1GLfloat mat_specular1=1.0,1.0,1.0,1.0;GLfloat mat_shininess1=50.0;GLfloat light_position1=0.0,0.0,0.0,0.0;GLfloat red_light=1.0,0.0,0.0,1.0;GLfloat Light_Model_Ambient1=0.2,0.2,0.2,1.0; glLightfv(GL_LIG

5、HT1, GL_POSITION, light_position1); /光源位置 glLightfv(GL_LIGHT1, GL_DIFFUSE, red_light); /漫放射光分量強(qiáng)度 glLightfv(GL_LIGHT1, GL_SPECULAR, red_light); /折射光強(qiáng)度glLightModelfv(GL_LIGHT_MODEL_AMBIENT,Light_Model_Ambient1);/開啟燈光glEnable(GL_LIGHTING);glEnable(GL_LIGHT0);glEnable(GL_LIGHT1);glEnable(GL_DEPTH_TEST);

6、 void display(void)glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);glPushMatrix(); / 定義太陽(yáng)的材質(zhì)并繪制太陽(yáng) GLfloat sun_mat_ambient = 1.0f, 0.0f, 0.0f, 1.0f; /定義材質(zhì)的環(huán)境光顏色,偏紅色 GLfloat sun_mat_diffuse = 0.5f, 0.5f, 0.0f, 1.0f; /定義材質(zhì)的漫反射光顏色,偏紅色 GLfloat sun_mat_specular = 1.0f,0.0f, 0.0f, 1.0f; /定義材質(zhì)的鏡面反射光顏色,紅色 G

7、Lfloat sun_mat_emission = 0.0f, 0.0f, 0.0f, 1.0f; /定義材質(zhì)的輻射光顏色,為0 GLfloat sun_mat_shininess = 32.0f; glMaterialfv(GL_FRONT,GL_AMBIENT,sun_mat_ambient); glMaterialfv(GL_FRONT,GL_DIFFUSE,sun_mat_diffuse); glMaterialfv(GL_FRONT,GL_SPECULAR,sun_mat_specular); glMaterialfv(GL_FRONT,GL_EMISSION,sun_mat_emi

8、ssion); glMaterialf (GL_FRONT,GL_SHININESS,sun_mat_shininess); glutSolidSphere(0.5,40,16);/太陽(yáng)glRotatef(GLfloat) year,0.0,1.0,0.0); glPushMatrix(); GLfloat earth_mat_ambient = 0.0f, 0.0f, 1.0f, 1.0f; /定義材質(zhì)的環(huán)境光顏色,偏藍(lán)色 GLfloat earth_mat_diffuse = 0.0f, 0.0f, 0.5f, 1.0f; /定義材質(zhì)的漫反射光顏色,偏藍(lán)色 GLfloat earth_ma

9、t_specular = 1.0f, 0.0f, 0.0f, 1.0f; /定義材質(zhì)的鏡面反射光顏色,紅色 GLfloat earth_mat_emission = 0.0f, 0.0f, 0.0f, 1.0f; /定義材質(zhì)的輻射光顏色,為0 GLfloat earth_mat_shininess = 30.0f; glMaterialfv(GL_FRONT, GL_AMBIENT, earth_mat_ambient); glMaterialfv(GL_FRONT, GL_DIFFUSE, earth_mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECU

10、LAR, earth_mat_specular); glMaterialfv(GL_FRONT, GL_EMISSION, earth_mat_emission); glMaterialf (GL_FRONT, GL_SHININESS, earth_mat_shininess); glTranslatef(0.8,0.0,0.0);glRotatef(GLfloat) day,0.0,1.0,0.5);/位置變化glutSolidSphere(0.2,20,8);/地球GLfloat earth_mat_ambient = 0.0f, 1.0f, 0.0f, 1.0f; /定義材質(zhì)的環(huán)境光顏

11、色,偏綠色 GLfloat earth_mat_diffuse = 0.0f, 0.5f, 0.0f, 1.0f; /定義材質(zhì)的漫反射光顏色,偏綠色 GLfloat earth_mat_specular = 1.0f, .0f, 0.0f, 1.0f; /定義材質(zhì)的鏡面反射光顏色,紅色 GLfloat earth_mat_emission = 0.0f, 0.0f, 0.0f, 1.0f; /定義材質(zhì)的輻射光顏色,為0 GLfloat earth_mat_shininess = 30.0f; glMaterialfv(GL_FRONT, GL_AMBIENT, earth_mat_ambien

12、t); glMaterialfv(GL_FRONT, GL_DIFFUSE, earth_mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, earth_mat_specular); glMaterialfv(GL_FRONT, GL_EMISSION, earth_mat_emission); glMaterialf (GL_FRONT, GL_SHININESS, earth_mat_shininess); glTranslatef(0.4,0.0,0.0);glRotatef(GLfloat) day,0.0,1.0,0.0);glutSo

13、lidSphere(0.1,20,8);/月亮 glPopMatrix();glPopMatrix();glutSwapBuffers();glFlush();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);elseglOrtho(-1.5*

14、(GLfloat)w/(GLfloat)h,1.5*(GLfloat)w/(GLfloat)h,-1.5,1.5,-10.0,10.0);glMatrixMode(GL_MODELVIEW);glLoadIdentity();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 'd':day=(day+10)%360;glutPostRedisplay();break;case 'D':day=(d

15、ay-10)%360;glutPostRedisplay();break;case 'y':year=(year + 5)%360;glutPostRedisplay();break;case 'Y':year=(year-5)%360;glutPostRedisplay();break;case 27:exit(0);break;default:break;int main(int argc,char *argv)glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB|GLUT_DEPTH);glutInitWindowSize(500,500);glutInitWindowPosition(100,100);glutCreateWindo

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論