![計算機圖形學試驗報告_第1頁](http://file4.renrendoc.com/view/41d6da2a5086f35abde4c9a8838ea585/41d6da2a5086f35abde4c9a8838ea5851.gif)
![計算機圖形學試驗報告_第2頁](http://file4.renrendoc.com/view/41d6da2a5086f35abde4c9a8838ea585/41d6da2a5086f35abde4c9a8838ea5852.gif)
![計算機圖形學試驗報告_第3頁](http://file4.renrendoc.com/view/41d6da2a5086f35abde4c9a8838ea585/41d6da2a5086f35abde4c9a8838ea5853.gif)
![計算機圖形學試驗報告_第4頁](http://file4.renrendoc.com/view/41d6da2a5086f35abde4c9a8838ea585/41d6da2a5086f35abde4c9a8838ea5854.gif)
![計算機圖形學試驗報告_第5頁](http://file4.renrendoc.com/view/41d6da2a5086f35abde4c9a8838ea585/41d6da2a5086f35abde4c9a8838ea5855.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、實驗成績:計算機圖形學實驗報告6班級:1420551專業(yè):網(wǎng)絡工程學號:姓名:計算機圖形學課程實驗報告(六)班 級1420551實驗日期2016.12.08姓 名學號實 驗 名 稱球面光源與材質交互作用算法實驗目的及要求.材質模型.光源模型.光照模型算 法 及 實 驗 步 驟.讀入球面的頂點表和面表。.循環(huán)訪問三角形面片和四邊形面片的每個頂點,調用光照函數(shù)計算所獲 得的光強。.使用雙緩沖技術繪制球面小面片的二維透視投影圖。.使用有效邊表填充算法填充三角形面片和四邊形面片。.使用深度緩沖算法對球面進行動態(tài)消隱。.使用定時器改變球面的轉角生成旋轉動回。調 試 過 程 及 實 驗 結過程:.初始化左
2、窗格控件.左窗格控件響應函數(shù).設計光源類.設計材質類.設計光照類.右窗格內更新視圖 結果:2果ime I總結(核心源程序清單)1.初始化左窗格控件 void CLeftPortion:OnInitialUpdate() (CFormView二OnInitialUpdate();/ TODO: Add your specialized code here and/or call the base class/設置左窗格控件的初始狀態(tài)CheckRadioButton(IDC_GOLD,IDC_BERYL,IDC_RUBY);CheckRadioButton(IDC_LEFTTOP,IDC_RIGH
3、TDOWN,IDC_RIGHTTO P);m_Ambient=TRUE;m_Diffuse=TRUE;m_Specular=TRUE;UpdateData(FALSE);2.左窗格控件響應函數(shù):void CLeftPortion:OnAmbient()/ 環(huán)境光(/ TODO: Add your control notification handler code hereCTestDoc *pDoc=(CTestDoc*)CFormView:GetDocument(); pDoc-UpdateAllViews(NULL,1); void CLeftPortion:OnDiffuse()/ 漫反
4、射光(/ TODO: Add your control notification handler code here CTestDoc *pDoc=(CTestDoc*)CFormView:GetDocument(); pDoc-UpdateAllViews(NULL,2); void CLeftPortion二OnSpecular()鏡面反射光(/ TODO: Add your control notification handler code here CTestDoc *pDoc=(CTestDoc*)CFormView:GetDocument(); pDoc-UpdateAllView
5、s(NULL,3);void CLeftPortion:OnGold()/ “金”材質(/ TODO: Add your control notification handler code here CTestDoc *pDoc=(CTestDoc*)CFormView:GetDocument(); pDoc-UpdateAllViews(NULL,4);void CLeftPortion:OnSilver()/ “銀”材質 (/ TODO: Add your control notification handler code here CTestDoc *pDoc=(CTestDoc*)CF
6、ormView:GetDocument(); pDoc-UpdateAllViews(NULL,5);void CLeftPortion二OnRuby() “紅寶石”材質(/ TODO: Add your control notification handler code here CTestDoc *pDoc=(CTestDoc*)CFormView:GetDocument(); pDoc-UpdateAllViews(NULL,6);void CLeftPortion二OnBeryl()/ “綠寶石”材質(/ TODO: Add your control notification hand
7、ler code here CTestDoc *pDoc=(CTestDoc*)CFormView:GetDocument(); pDoc-UpdateAllViews(NULL,7);void CLeftPortion:OnLefttop()/ 光源位于“左上”(/ TODO: Add your control notification handler code here CTestDoc *pDoc=(CTestDoc*)CFormView:GetDocument(); pDoc-UpdateAllViews(NULL,8);void CLeftPortion二OnLeftdown() 光
8、源位于“左下”(/ TODO: Add your control notification handler code here CTestDoc *pDoc=(CTestDoc*)CFormView:GetDocument(); pDoc-UpdateAllViews(NULL,9);void CLeftPortion:OnRighttop()/ 光源位于“右上”(/ TODO: Add your control notification handler code here CTestDoc *pDoc=(CTestDoc*)CFormView:GetDocument(); pDoc-Upda
9、teAllViews(NULL,10);void CLeftPortion二OnRightdown() 光源位于“右下”/ TODO: Add your control notification handler code here CTestDoc *pDoc=(CTestDoc*)CFormView:GetDocument();pDoc-UpdateAllViews(NULL,11);.設計光源類:class CLightpublic:CLight();virtual CLight();void SetDiffuse(CRGB);設置光源的漫反射光void SetSpecular(CRGB)
10、;/殳置光源的鏡面反射光void SetPosition(double,double,double);/設置光源的直角坐標位置void SetGlobal(double,double,double);/S 置光源的球坐標位置void SetCoef(double,double,double);/段置光強的衰減系數(shù)void SetOnOff(BOOL);設置光源開關狀態(tài)void GlobalToXYZ();/球坐標轉換為直角坐標public:CRGB L_Diffuse;光的漫反射顏色CRGB L_Specular;/光的鏡面高光顏色CP3 L_Position;/光源的位置double L_R
11、,L_Phi,L_Theta;/光源球坐標double L_C0;/常數(shù)衰減系數(shù)double L_C1;/線性衰減系數(shù)double L_C2;/二次衰減系數(shù)BOOL L_OnOff;/ 光源開關BOOL b_Specular;BOOL b_Diffuse;BOOL b_Ambient;一CLight:CLight()L_Diffuse=CRGB(0.0,0.0,0.0);光源的漫反射顏色L_Specular=CRGB(1.0,1.0,1.0);/光源鏡面高光顏色L_Position.x=0.0,L_Position.y=0.0,L_Position.z=1000;/光源位置直角坐標L_R=10
12、00,L_Phi=0,L_Theta=0;/光源位置球坐標L_C0=1.0;/常數(shù)衰減系數(shù)L_C1=0.0;/線性衰減系數(shù)L_C2=0.0;/二次衰減系數(shù)L_OnOff=TRUE;/ 光源開啟b_Specular=TRUE;b_Diffuse=TRUE;bAmbient=TRUE;)CLight:-CLight()()void CLight:SetDiffuse(CRGB dif)(L_Diffuse=dif;)void CLight:SetSpecular(CRGB spe)(L_Specular=spe;)void CLight:SetPosition(double x,double y,
13、double z)(L_Position.x=x;L_Position.y=y;L_Position.z=z;).void CLight:SetGlobal(double r,double phi,double theta) (L_R=r;L_Phi=phi;L_Theta=theta;).void CLight:SetOnOff(BOOL onoff)(L_OnOff=onoff;).void CLight:SetCoef(double c0,double c1,double c2)(L_C0=c0;L_C1=c1;L_C2=c2;)void CLight:GlobalToXYZ()L_Po
14、sition.x=L_R*sin(L_Phi*PI/180)*cos(L_Theta*PI/180);L_Pos用on.y=L_R*sin(L_Phi*PI/180)*sin(L_Theta*PI/180);L_Position.z=L_R*cos(L_Phi*PI/180);.設計材質類: class CMaterialpublic:CMaterial();virtual CMaterial();void SetAmbient(CRGB);/設置材質對環(huán)境光的反射率void SetDiffuse(CRGB);/設置材質對漫反射光的反射率void SetSpecular(CRGB);/股置材質
15、對鏡面反射光的反射率void SetEmit(CRGB);/設置材質自身輻射的顏色void SetExp(double);/設置材質的高光指數(shù)public:CRGB M_Ambient;/材質對環(huán)境光的反射率CRGB M_Diffuse;材質對漫反射光的反射率CRGB M_Specular;/M質對鏡面反射光的反射率CRGB M_Emit;材質自身輻射的顏色 double M_n;/材質的高光指數(shù);CMaterial:CMaterial()M_Ambient=CRGB(0.2,0.2,0.2);材質對環(huán)境光的反射率M_Diffuse=CRGB(0.8,0.8,0.8);/材質對漫反射光的反射率
16、M_Specular=CRGB(0.0,0.0,0.0);/材質對鏡面反射光的反射率M_Emit=CRGB(0.0,0.0,0.0);/材質自身發(fā)散的顏色M_n=1.0;/高光指數(shù)CMaterial:CMaterial() void CMaterial:SetAmbient(CRGB c)M_Ambient=c;.void CMaterial:SetDiffuse(CRGB c)M_Diffuse=c;).void CMaterial:SetSpecular(CRGB c)(M_Specular=c;).void CMaterial:SetEmit(CRGB emi)(M_Emit=emi;)
17、.void CMaterial:SetExp(double n)(M_n=n;).設計光照類:class CLighting (public:CLighting();CLighting(int);virtual CLighting();void SetLightNumber(int);/ 設置光源數(shù)量CRGB Lighting(CP3,CP3,CVector,CMaterial *); 計算光照 public:int LightNum;/ 光源數(shù)量CLight *Light;/ 光源數(shù)組CRGB Ambient;/環(huán)境光);CLighting:CLighting()(LightNum=1;Li
18、ght=new CLightLightNum;Ambient=CRGB(1.0,1.0,1.0);環(huán)境光恒定不變)CLighting:CLighting()(if(Light)(delete 口Light;Light=NULL;) void CLighting:SetLightNumber(int Inum) (if(Light)delete Light;LightNum=lnum;Light=new CLightlnum;)CLighting:CLighting(int lnum)(LightNum=lnum;Light=new CLightlnum;Ambient=CRGB(0.3,030
19、.3);)CRGB CLighting:Lighting(CP3 ViewPoint,CP3 Point,CVectorNormal,CMaterial *pMaterial) (CRGB LastC=pMaterial-M_Emit;材質自身發(fā)散色為初始值for(int i=0;iM_Diffuse.red*CosTheta;InitC.green+=Lighti.L_Diffuse.green*pMaterial-M_Diffuse.green*Cos Theta;InitC.blue+=Lighti.L Diffuse.blue*pMaterial-M Diffuse.blue*CosT
20、het10 a;)/第2步,加入鏡面反射光 if(Lighti.b_Specular) (.CVector VV(Point,ViewPoint);/VV 為視矢量 VV=VV .Normalize。;“單位化視矢量CVector VH=(VL+VV)/(VL+VV).Mag();/ 平分矢量 double nHN=pow(MAX(Dot(VH,VN),0),pMaterial-M_n);InitC.red+=Lighti.L_Specular.red*pMaterial-M_Specular.red*nHN;InitC.green+=Lighti.L_Specular.green*pMate
21、rial-M_Specular.green*n HN;InitC.blue+=Lighti.L_Specular.blue*pMaterial-M_Specular.blue*nHN;)/第3步,光強衰減double c0=Lighti.L_C0;/c0 為常數(shù)衰減因子double c1=Lighti.L_C1;/c1 線性衰減因子 double c2=Lighti.L_C2;/c2 二次衰減因子double f=(1.0/(c0+c1*d+c2*d*d);/ 光強衰減函數(shù) f=MIN(1.0,f);LastC+=InitC*f;) else ( LastC+=Point.c;/物體自身顏色)
22、/第4步,加入環(huán)境光 if(Light0.b_Ambient) (.LastC+=Ambient*pMaterial-M_Ambient;)第5步,顏色歸一化到0,1區(qū)間 LastC.Normalize();/第6步,返回所計算頂點的光強顏色 return LastC;).右窗格內更新視圖:void CTestView:OnUpdate(CView* pSender, LPARAM lHint, CObject*11 pHint) (/ TODO: Add your specialized code here and/or call the base class switch(lHint)(c
23、ase 1:/環(huán)境光pLight-Light0.b_Ambient=!pLight-Light0.b_Ambient;break;case 2:/漫反射光pLight-Light0.b_Diffuse=!pLight-Light0.b_Diffuse;break;case 3:/旗面反射光pLight-Light0.b_Specular=!pLight-Light0.b_Specular; break;case 4:/宸pMaterial-SetAmbient(CRGB(0.247,0.2,0.075); 材質對環(huán)境光的 反射率pMaterial-SetDiffuse(CRGB(0C52,0.
24、606,0.226);/材質對環(huán)境光和 漫反射光的反射率相等pMaterial-SetSpecular(CRGB(1.0,1.0,1.0);/M質對鏡面反射光的 反射率pMaterial-SetEmit(CRGB(0.2,0.2,0.0);/材質自身發(fā)散的顏色pMaterial-SetExp(50);/ 高光指數(shù) break;case 5:/根pMaterial-SetAmbient(CRGB(0.192,0.192,0.192);/材質 對環(huán) 境光 的反射率pMaterial-SetDiffuse(CRGB(0C08,0.508,0.508);/材質對環(huán)境光和 漫反射光的反射率相等pMaterial-SetSpecular(CRGB(1.0,1.0,1.0);/M質對鏡面反射光的 反射率pMaterial-SetEmit(CRGB(0.2,0.2,0.2);/材質自身發(fā)散的顏色pMaterial-SetExp(50);/ 高光指數(shù) break;case 6:/紅寶石pMaterial-SetAmbien
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2031年中國茶制床墊行業(yè)投資前景及策略咨詢研究報告
- 2025至2031年中國石榴干紅葡萄酒行業(yè)投資前景及策略咨詢研究報告
- 2025年油壓壓彎床項目可行性研究報告
- 2025年有色金屬連桿項目可行性研究報告
- 2025年攪拌機攪拌臂項目可行性研究報告
- 2025年小體視棱鏡項目可行性研究報告
- 2025至2031年中國內置式伺服放大器模塊行業(yè)投資前景及策略咨詢研究報告
- 2025年沖裁拉伸模具項目可行性研究報告
- 2025至2030年中國雞藥數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年香油紅尖椒項目投資價值分析報告
- 駕照考試題庫及答案(完整版)
- 2025年1月日歷表(含農歷-周數(shù)-方便記事備忘)
- 2025中國鐵塔公司社會招聘85人高頻重點提升(共500題)附帶答案詳解
- 專題06 現(xiàn)代文閱讀(解析版)2015-2024單招考試語文(四川真題)
- 《固體食品罐用冷軋電鍍錫鋼板及鋼帶》編制說明
- 人教版數(shù)學三年級下冊 期末測試卷帶答案(能力提升)
- 《人工智能發(fā)展史》課件
- 2024年同等學力人員申請碩士學位英語試卷與參考答案
- 臨床用血管理培訓
- 介入手術室護理風險
- 春季安全行車教育培訓
評論
0/150
提交評論