計(jì)算機(jī)圖形學(xué)實(shí)驗(yàn)報(bào)告-實(shí)驗(yàn)5Phong光照模型_第1頁(yè)
計(jì)算機(jī)圖形學(xué)實(shí)驗(yàn)報(bào)告-實(shí)驗(yàn)5Phong光照模型_第2頁(yè)
計(jì)算機(jī)圖形學(xué)實(shí)驗(yàn)報(bào)告-實(shí)驗(yàn)5Phong光照模型_第3頁(yè)
計(jì)算機(jī)圖形學(xué)實(shí)驗(yàn)報(bào)告-實(shí)驗(yàn)5Phong光照模型_第4頁(yè)
計(jì)算機(jī)圖形學(xué)實(shí)驗(yàn)報(bào)告-實(shí)驗(yàn)5Phong光照模型_第5頁(yè)
已閱讀5頁(yè),還剩1頁(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、PAGE 32PAGE 6計(jì)算機(jī)圖形學(xué)實(shí)驗(yàn)報(bào)告班級(jí) 計(jì)算機(jī)工碩班 學(xué)號(hào) 2011220456 姓名 王澤晶 實(shí)驗(yàn)五: Phong光照模型 實(shí)驗(yàn)?zāi)康耐ㄟ^(guò)本次試驗(yàn),學(xué)生可以掌握簡(jiǎn)單光照明模型的計(jì)算,以及真實(shí)感繪制中三維場(chǎng)景搭建的初步知識(shí)。實(shí)驗(yàn)內(nèi)容:對(duì)給定的光源、相機(jī)狀態(tài),對(duì)球進(jìn)行Phong光照明模型繪制。搭建三維場(chǎng)景:在三維空間中擺放1個(gè)球,半徑為R,默認(rèn)為50 ,擺放位置為(0,0,0)球的材質(zhì)默認(rèn)值為Ka = (0.1,0.1,0.1), Kd = (0,0,0.8), Ks = 0.2, n = 10視點(diǎn)方向初始為(0,0,1), 光源方向初始為(1,1,1)視口設(shè)置為x0 = -100,

2、y0 = -75, w = 200, h = 150使用phong模型繪制場(chǎng)景試驗(yàn)步驟:添加成員函數(shù),編寫成員數(shù)代碼為override public function computeIntersection( viewStart:Vec3, viewDir:Vec3):Boolean/ See /geometry/sphereline/var viewEnd:Vec3 = viewStart.add(viewDir);var A:Number = Math.pow(viewEnd.getVec(0) - viewStart.getVec(0), 2) +Math.pow(viewEnd.get

3、Vec(1) - viewStart.getVec(1), 2) +Math.pow(viewEnd.getVec(2) - viewStart.getVec(2), 2);var B:Number =(viewEnd.getVec(0) - viewStart.getVec(0) * (viewStart.getVec(0) - _position.getVec(0) +(viewEnd.getVec(1) - viewStart.getVec(1) * (viewStart.getVec(1) - _position.getVec(1) +(viewEnd.getVec(2) - view

4、Start.getVec(2) * (viewStart.getVec(2) - _position.getVec(2) * 2.0;var C:Number = Math.pow(_position.getVec(0) - viewStart.getVec(0), 2) + Math.pow(_position.getVec(1) - viewStart.getVec(1), 2) +Math.pow(_position.getVec(2) - viewStart.getVec(2), 2) - _radius*_radius;/ Solve C + Bt + At2 = 0var delt

5、a:Number = B*B - 4*A*C;if ( delta0.0 | A=0.0 ) return false;/ We dont consider whether 0t1 here because real viewer is at infinite placevar t1:Number = (-B + Math.sqrt(delta) / (2*A);var t2:Number = (-B - Math.sqrt(delta) / (2*A);if ( t1t2 )point = viewStart.multiplyk(1.0 - t1).add(viewEnd.multiplyk

6、(t1);elsepoint = viewStart.multiplyk(1.0 - t2).add(viewEnd.multiplyk(t2);normal = Vec3.normalize(point.minus(_position);return true;public var _width :Number =0.0;public var _height:Number = 0.0;public var data:Array = new Array();protected function group1_creationCompleteHandler(event:FlexEvent):vo

7、iddraw();public function draw():voidgraphics.clear();if(txtViewDir.text = )return;var ary:Array = txtViewDir.text.split(,);var flag:Boolean = false;for(var i:int= 0;iary.length;i+)if(aryi = | isNaN(aryi)flag = true;break;if(flag) txtViewDir.setStyle(color,0 xff0000);return;txtViewDir.setStyle(color,

8、0 x000000);var viewDir:Vec3 = new Vec3(Number(ary0), Number(ary1), Number(ary2);ary = txtLight.text.split(,);flag = false;for(i= 0;iary.length;i+)if(aryi = | isNaN(aryi)flag = true;break;if(flag) txtLight.setStyle(color,0 xff0000);return;txtLight.setStyle(color,0 x000000);var light:Light = new Light

9、();light.direction = new Vec3(Number(ary0), Number(ary1), Number(ary2).negative();light.ambient = new Vec3(Number(ary0), Number(ary1), Number(ary2);ensity = new Vec3(Number(ary0), Number(ary1), Number(ary2);var material:Material = new Material();material.diffuse =new Vec3(0.0, 0.0, 0.8);material.spe

10、cular =new Vec3(0.2, 0.2, 0.2);material.ambient =new Vec3(0.1, 0.1, 0.1);data = createSceneImage( 200, 150, viewDir, light, material );drawImg();public function drawImg():voidfor(var y:int = 0 ;y150;y+)for(var x:int =0;x200;x+)var index:int = (y*200 + x) * 3;var r:Number = dataindex+0;var g:Number =

11、 dataindex+1;var b:Number = dataindex+2;var cl:uint =(r 16) | (g 8) | b;this.graphics.beginFill(cl)this.graphics.drawCircle(x,y,1);this.graphics.endFill();public function allocateBuffer( width:int,height: int ):Arrayvar data:Array = new Array();data.length = width * height * 3;_width = width;_height

12、 = heightreturn data;public function createSceneImage( width:int,height: int ,viewDir:Vec3, light:Light, material:Material ):Arrayvar data:Array = new Array();var sphere:SphereObject = new SphereObject(50.0);sphere.setPosition(new Vec3(0.0, 0.0, 0.0) );sphere.setMaterial( material );var halfW:int =

13、width / 2var halfH:int = height / 2;for ( var y:int=0; yheight; +y )for ( var x:int=0; xwidth; +x )var viewStart:Vec3 = new Vec3(Number(x - halfW), Number(y - halfH), 0.0);if ( puteIntersection(viewStart, viewDir) )sphere.color = puteColor(light, viewDir, sphere.normal);elsesphere.color = new Vec3(0.1, 0.1, 0.1);var index:int = (y*width + x) * 3;dataindex+0 = (sphere.color.getVec(0) * 255.0);dataindex

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論