




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、實驗7 OpenGL光照一、 實驗目的了解掌握OpenGL程序的光照與材質,能正確使用光源與材質函數設置所需的繪制效果。二、 實驗內容(1)下載并運行Nate Robin教學程序包中的lightmaterial程序,試驗不同的光照與材質系數;(2)運行示范代碼1,了解光照與材質函數使用。三、 實驗原理為在場景中增加光照,需要執(zhí)行以下步驟:(1) 設置一個或多個光源,設定它的有關屬性;(2) 選擇一種光照模型;(3) 設置物體的材料屬性。具體見教材第8章8.6節(jié)用OpenGL生成真實感圖形的相關內容。四、 實驗代碼#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、質指定,單值材質參數,具體指針);glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular);/鏡面反射光的反射系數glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess);/鏡面反射指數/glLightfv(光源,屬性名,屬性值); glLightfv(GL_LIGHT0, GL_POSITION, light_position); /光源位置 glLightfv(GL_LIGHT0, GL_DIFFUSE, white_light); /漫放射光分量強度 glLightfv(GL_LIGHT0, GL_SPECU
4、LAR, white_light); /折射光強度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); /漫放射光分量強度 glLightfv(GL_LIGHT1, GL_SPECULAR, red_light); /折射光強度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(); / 定義太陽的材質并繪制太陽 GLfloat sun_mat_ambient = 1.0f, 0.0f, 0.0f, 1.0f; /定義材質的環(huán)境光顏色,偏紅色 GLfloat sun_mat_diffuse = 0.5f, 0.5f, 0.0f, 1.0f; /定義材質的漫反射光顏色,偏紅色 GLfloat sun_mat_specular = 1.0f,0.0f, 0.0f, 1.0f; /定義材質的鏡面反射光顏色,紅色 G
7、Lfloat sun_mat_emission = 0.0f, 0.0f, 0.0f, 1.0f; /定義材質的輻射光顏色,為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);/太陽glRotatef(GLfloat) year,0.0,1.0,0.0); glPushMatrix(); GLfloat earth_mat_ambient = 0.0f, 0.0f, 1.0f, 1.0f; /定義材質的環(huán)境光顏色,偏藍色 GLfloat earth_mat_diffuse = 0.0f, 0.0f, 0.5f, 1.0f; /定義材質的漫反射光顏色,偏藍色 GLfloat earth_ma
9、t_specular = 1.0f, 0.0f, 0.0f, 1.0f; /定義材質的鏡面反射光顏色,紅色 GLfloat earth_mat_emission = 0.0f, 0.0f, 0.0f, 1.0f; /定義材質的輻射光顏色,為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; /定義材質的環(huán)境光顏
11、色,偏綠色 GLfloat earth_mat_diffuse = 0.0f, 0.5f, 0.0f, 1.0f; /定義材質的漫反射光顏色,偏綠色 GLfloat earth_mat_specular = 1.0f, .0f, 0.0f, 1.0f; /定義材質的鏡面反射光顏色,紅色 GLfloat earth_mat_emission = 0.0f, 0.0f, 0.0f, 1.0f; /定義材質的輻射光顏色,為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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國大桂花行業(yè)投資前景及策略咨詢研究報告
- 2025年鄉(xiāng)村振興戰(zhàn)略中職業(yè)技能培訓的公共服務均等化研究
- 教育政策與學生創(chuàng)新能力發(fā)展的跨文化研究
- 技術支持下的新型教學互動模式探索
- 提升學習體驗了解學習者的心理承受力與期望
- 探索智能教育平臺在教育評估中的應用
- 機械設計基礎(第二版)課件 李春明 2.2齒輪傳動 - 5.1 機械系統方案設計概述
- 教育機器人技術在教學改革中的作用
- 抗靜電橡膠地板材料企業(yè)制定與實施新質生產力項目商業(yè)計劃書
- 傳統手工藝體驗工坊企業(yè)制定與實施新質生產力項目商業(yè)計劃書
- 中國古都西安英文介紹課件
- 《相遇問題》課件
- 《預防脊柱側彎》課件
- 基礎工程課后題答案-6
- 幼兒園水拓畫制作教程
- 質量管理體系之數字化轉型與智能化升級
- 《電力機車制動機》 課件 項目三 CCB-II制動系統
- 中醫(yī)面診-(重要)
- 《動物飼料配方技術》課件
- 公司?;饭芾淼慕涷灧窒砼c成功案例
- 高中生物學科中差異化教學模式探討
評論
0/150
提交評論