




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、PAGE 32PAGE 6计算机图形学实验报告班级 计算机工硕班 学号 2011220456 姓名 王泽晶 实验五: Phong光照模型 实验目的通过本次试验,学生可以掌握简单光照明模型的计算,以及真实感绘制中三维场景搭建的初步知识。实验内容:对给定的光源、相机状态,对球进行Phong光照明模型绘制。搭建三维场景:在三维空间中摆放1个球,半径为R,默认为50 ,摆放位置为(0,0,0)球的材质默认值为Ka = (0.1,0.1,0.1), Kd = (0,0,0.8), Ks = 0.2, n = 10视点方向初始为(0,0,1), 光源方向初始为(1,1,1)视口设置为x0 = -100,
2、y0 = -75, w = 200, h = 150使用phong模型绘制场景试验步骤:添加成员函数,编写成员数代码为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. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2016年7月国开电大法学本科《国际法》期末纸质考试试题及答案
- 2025版树苗种植与养护一体化服务合同
- 2025年度桶装水配送与售后保障服务合同模板下载
- 2025年度公共基础设施项目房屋拆迁安置协议
- 2025大连正规商业租聘合同模板标准化修订
- 2025年智能发电机组租赁及远程监控服务协议
- 2025房产重组分家协议及物业管理合同
- 2025年度返聘项目顾问劳动合同范本
- 2025年度宠物医院店股权转让及医疗服务合同
- 2025年度医疗健康产业品牌形象建设服务合同
- 2025江苏宿迁沭阳县司法局招聘人民调解员1人备考试题及答案解析
- 西藏朗县2025年上半年公开招聘村务工作者试题含答案分析
- 2025年高一上学期开学第一课主题班会课件
- 水彩画基本知识课件
- 特种设备无损检测技术
- 2025年税务师考试税收征收管理法条例模拟试卷
- 2025-2026学年青岛版(2017)小学科学四年级上册教学计划及进度表
- 吉林省2025年中考语文试卷及答案
- 排污许可审核方案投标文件(技术方案)
- 《汽车性能评价与选购》高职汽车销售全套教学课件
- 燃气行业安全生产费用提取标准
评论
0/150
提交评论