圖形學實驗六真實感圖形演算法
阿新 • • 發佈:2018-12-18
實驗六 真實感圖形演算法
實驗型別:設計型 實驗學時:2實驗要求:必修
一、實驗目的
瞭解掌握OpenGL程式的光照與材質,能正確使用光源與材質函式設定所需的繪製效果。
二、實驗內容
(1)下載並執行Nate Robin教學程式包中的lightmaterial程式,試驗不同的光照與材質係數;
(2)執行示範程式碼1,瞭解光照與材質函式使用。
三、實驗原理
為在場景中增加光照,需要執行以下步驟:
設定一個或多個光源,設定它的有關屬性;
選擇一種光照模型;
設定物體的材料屬性。
四、實驗示範程式碼(略)
五、實驗步驟
1 在Windows xp/win7操作環境下,啟動VC;
2 建立W32 Console Application 的應用工程;
3 建立源程式編輯環境,進行編輯源程式。
4 除錯執行程式,完成實驗。
六、實驗結果處理
演示結果並儲存相關檔案。
七、實驗注意事項
注意程式設計環境的配置,即在Windows環境下,OpenGL擴充套件庫相關檔案的配置,把標頭檔案“GL.H”、庫檔案“OPENGL32.LIB”和動態連結庫“OPENGL32.DLL”配置到相應的目錄下。
八、預習與思考題
預習:閱讀課本相關內容,仔細閱讀示範程式碼。
思考題:在實驗5太陽系模型的基礎上,嘗試為其增加光照與材質效果。
九、實驗報告要求
1、實驗報告中應包括相關操作步驟和程式程式碼和執行效果截圖。
2.書寫實驗報告時要結構合理,層次分明,在分析描述的時候,需要注意語言的流暢。
茶壺程式碼:
#include<GL/glut.h> #include<stdlib.h> 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,0.1}; glClearColor(0.0,0.0,0.0,0.0); glShadeModel(GL_SMOOTH); glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular); glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess); glLightfv(GL_LIGHT0,GL_POSITION,light_position); glLightfv(GL_LIGHT0,GL_DIFFUSE,white_light); glLightfv(GL_LIGHT0,GL_SPECULAR,white_light); glLightModelfv(GL_LIGHT_MODEL_AMBIENT,Light_Model_Ambient); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_DEPTH_TEST); } void display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glutSolidTeapot(0.5); 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); 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(); } int main(int argc,char** argv) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB |GLUT_DEPTH); glutInitWindowSize(500,500); glutInitWindowPosition(100,100); glutCreateWindow(argv[0]); init(); glutDisplayFunc(display); glutReshapeFunc(reshape); glutMainLoop(); return 0; }
下面為待完成:第一個為實驗需要做的,其他的為拓展,根據自己能力看是否要做。
完結!