




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、学号16082202032016-2017学年第2学期实体光照模型课程名称题目:专业:班级:姓名:导教师:课程设计报告用C语言设计实体光照模型网络工程(对口)16 (3)指聂代应豪代美丽成绩计算机学院2017年4月25日计算机学院实体光照模型课程设计报告目录课程设计题目:实体光照模型一需求分析2二总体设计2三详细设计3四源代码11一需求分析如对长方体,建 立一个点光源,采用环境光和点光源漫反射光的光照模型,应用FLAT明暗处理方法,显示平行投影后的长方体光 照效果。二总体设计图形介绍1计算机学院实体光照模型课程设计报告三详细设计1、原理光照模型是真实感图形技术的重要组成部分,它主要研究的是如何
2、根据光 学物理的有关定律,采用计算机来模拟自然界中光照明的物理过程。本文通过对光源特性和物体表面特性、局部光照模型和整体光照模型的具体分析,完 成 对光照模型的系统阐述。关键词:光源特性、局部光照模型、全局光照模型、真实感图形2、详细分支定义三维齐次坐标结构和面的结构;定义顶点表和面表,对长方体绕X轴旋转和绕Y轴旋转。对每一个面计算其外法向量及可见性对每个可见面计算其光线向量,并判断其是否为背光面。计算每个见光面的环境光和点光源的漫反射分量。用该面的光强显示该可见面3、设计介绍(1)旋转变换绕X轴旋转变换的坐标表示 绕Y轴旋转变换的坐标表示(2)平行投影在XOYF面投影后坐标(3)环境光模型物
3、体没有受到光源的直射,但其表面仍有一定亮度,这是由于环境光的作用。表示环境光反射强度表示环境光反射率表示环境光入射强度(4)漫反射光模型漫反射光可认为是在点光源的照射下,光被物体表面吸收后,然后重新反射 出来的光。表示漫反射光强度表示漫反射反射率表示点光源入射强度大小入射光与物体表面法矢量夹角4、定义结构及分析i计算机学院实体光照模型课程设计报告(1)定义三维齐次向量结构体typedef struct Vector3D float x;float y;float z;iint f;/f表示所在的平面的编号VECTOR;(2)定义三维齐次坐标结构typedef struct tagHOMOCOO
4、RD float x;float y;float z;float w;HOMOCOORD;(3)定义面的结构typedef struct tagPLANE int v0, v1, v2, v3;VECTOR n;/外法向量HOMOCOORD center; / 中心点float Id;/漫反射光强计算机学院实体光照模型课程设计报告int flag;/标识符float kd;/漫反射率float ka;/环境光反射率float Ie;/环境光反射光强float I;/光强PLANE;(4)定义点的结构typedef struct tagMYPOINT float x,y;MYPOINT;(5)长
5、方体顶点定义及初始化ptsnew HOMOCOORDptnpts0.x 1; pts0.y 2; pts0.z 1;pts0.w1;pts1.x -1; pts1.y 2; pts1.z 1; pts1.w1;pts2.x -1; pts2.y -2;pts2.z1; pts2.w1;pts3.x 1; pts3.y -2;pts3.z1;pts3.w1;pts4.x 1; pts4.y 2; pts4.z -1;pts4.w1;pts5.x -1; pts5.y 2; pts5.z -1;pts5.w1;1计算机学院实体光照模型课程设计报告-1;pts7.w1;pts6.x -1; pts6
6、.y -2;pts6.z-1;pts6.w1;pts7.x 1; pts7.y -2;pts7.z;(6)面表fn6;facesnewfaces0.v00;faces1.v04;faces2.v05;faces3.v06;faces4.v07;faces5.v07;PLANEfn;faces0.v11;faces1.v15;faces2.v16;faces3.v17;faces4.v14;faces5.v16;faces0.v22;faces1.v21;faces2.v22;faces3.v23;faces4.v20;faces5.v25;faces0.v33;faces1.v30;faces
7、2.v31;faces3.v32;faces4.v33;faces5.v34;(7)定义点光源、1、点光源视线方向、光照方向illuminant.x-100;illuminant.y-100;illuminant.z100;Ia 0.5;Ip 0.5;2、视线方向/环境光入射强度/漫反射入射光强度1VECTOR eye_vec;计算机学院实体光照模型课程设计报告eye_vec.x 0;eye_vec.y 0;eye_vec.z -1;3、定义光照方向light_vec new VECTORfn;VECTOR vector62;fori0; i6; i+vectori0CalculateVect
8、orptsfacesi.v0,pts facesi.v1, i ;1pts facesi.v2, i ;vectori1 CalculateVectorptsfacesi.v0,(8)各面可见性计算和判断1、计算各个面的外法向量faces0.n VecCrossvector00, vector01fori0; i6; i+facesi.n VecCrossvectori0, vectori12、各个面的可见性判定float cos_angle;fori0; i6; i+计算机学院实体光照模型课程设计报告cos_angle-1.0*InnerProductfacesi.n,eye_vec/Get
9、Modulefacesi.n*GetModuleeye_vec;ifcos_angle0facesi.flagVISIABLE;elsefacesi.flagUNVISIABLE;3、计算各个面的中心点fori0; ifn; i+facesi.center.xptsfacesi.v0.x+ptsfacesi.v1.x+ptsfacesi.v2.x+ptsfacesi.v3.x/4.0f ;facesi.center.yptsfacesi.v0.y+ptsfacesi.v1.y+ptsfacesi.v2.y+ptsfacesi.v3.y/4.0f ;facesi.center.zptsfaces
10、i.v0.z+ptsfacesi.v1.z+ptsfacesi.v2.z+ptsfacesi.v3.z/4.0f ;facesi.center.wptsfacesi.v0.w+ptsfacesi.v1.w+ptsfacesi.v2.w+ptsfacesi.v3.w/4.0f1计算机学院实体光照模型课程设计报告4、计算各个面的光照方向fori0; ifn; i+light_veci CalculateVectorilluminant, facesi.center, EOF;5、计算各个面的漫反射光强fori0; ifn; i+facesi.IdIp*facesi.kd*-1*InnerProdu
11、ctfacesi.n,light_veci/GetModulefacesi.n*GetModulelight_veci;6、计算各个面环境光反射光强fori0; ifn; i+facesi.Ie facesi.ka*Ia;7、计算各个面光强(漫反射光强和环境反射光强之和)fori0; ifn; i+facesi.I facesi.Id+facesi.Ie ;/窗口-视区变换实现过程1计算机学院实体光照模型课程设计报告float wxl-5,wxr5,wyb-5,wyt5;int vxl0,vxr800,vyb0,vyt600;(9)窗口 -视区变换int aintvxr-vxl/wxr-wxl
12、;int bintvxl-wxl*a;int cintvyt-vyb/wyt-wyb;int dintvyb-wyb*c;fori0;iptn;i+pts2Di.xa*ptsi.x+b;pts2Di.yc*ptsi.y+d;(10)路径填充CBrushBrush;Brush.CreateSolidBrushRGBfacesj.I*255,facesj.I*255,facesj.I*255+40;pd.SelectObject&Brush;pd.BeginPath;pd.MoveTop0;forint i1;i4;i+1计算机学院实体光照模型课程设计报告pd.LineTopi;pd.Li
13、neTop0;pd.EndPath;pd.FillPath;Brush.DeleteObject;四源代码Draw3DView.h 文件typedef struct Vector3D体 float x;float y;float z;int f;VECTOR;typedef struct tagHOMOCOORD结构/定义三维齐次向量结构/f表示所在的平面的编号/定义三维齐次坐标 float x;float y;float z;float w;i计算机学院实体光照模型课程设计报告HOMOCOORD;;typedef struct tagPLANE int v0, v1, v2, v3;VECT
14、OR n;HOMOCOORD center;float Id;int flag;float kd;float ka;float Ie;float I;PLANE;typedef struct tagMYPOINT/定义面的结构/外法向量/中心点/漫反射光强/漫反射率/环境光反射率/环境光反射光强/光强/定义点的结构,需要浮点数的x,y float x,y;MYPOINT;public:VECTOR CalculateVectorHOMOCOORD start, HOMOCOORD end, int face;/计算一个3维向量的函数,1计算机学院实体光照模型课程设计报告从start点指向end
15、点的属于face面的向量VECTOR VecCrossVECTOR vecl, VECTOR vec2;/计算两个向量叉积,即外法向量float InnerProductVECTORvecl, VECTOR vec2;float GetModuleVECTORvoid RotateYint angle;void RotateXint angle;void DrawMy3DGraphics;virtual CDraw3DView;protected:HOMOCOORD illuminant;float Ip;float Ia;VECTOR *light_vec;HOMOCOORD *pts;/计
16、算两个向量的内积vec; /计算向量的模绕y轴逆时针旋转绕x轴逆时针旋转/绘制长方体/定义光源坐标/定义光源光强/环境光光强/各个面的光照方向指针/三维顶点指针MYPOINT *pts2D;/自定义的二维浮点数结构,表示变换后的二维点PLANE *faces;/长方体的面指针int ptn,fn;/顶点个数与面的个数1Draw3DView.c 文件计算机学院实体光照模型课程设计报告int x_angle0;int y_angle0;void CDraw3DView:DrawMy3DGraphicsint i;/形体定义ptn8;ptsnew HOMOCOORDptn;/设置长方体pts0.x1
17、; pts0.y2;pts0.z1; pts0.w1;pts1.x-1;pts1.y2;pts1.z1;pts1.w1;pts2.x-1;pts2.y-2;pts2.z1; pts2.w1;pts3.x1;pts3.y-2;pts3.z1; pts3.w1;pts4.x1;pts4.y2;pts4.z-1;pts4.w1;pts5.x-1;pts5.y2;pts5.z-1;pts5.w1;pts6.x-1;pts6.y-2;pts6.z-1; pts6.w1;pts7.x1; pts7.y-2;pts7.z-1; pts7.w1;/ 给定义面的指针分配内存;fn6;facesnew PLANE
18、fn;/设置立方体各面faces0.v00;faces0.v11;faces0.v22;faces0.v33;faces1.v04;faces1.v15;faces1.v21;faces1.v30;faces2.v05;faces2.v16;1计算机学院实体光照模型课程设计报告faces2.v22;faces2.v31;faces3.v06;faces3.v17;faces3.v32;faces4.v07;faces4.v14;faces4.v33;faces5.v07;faces5.v16;faces5.v34;pts2Dnew MYPOINTptn;fori0; ifn; i+facesi
19、.ka0.8;facesi.kd0.8;/定义点光源illuminant.x-100;illuminant.y-100;illuminant.z100;Ia 0.5;Ip 0.5;/定义视线方向VECTOR eye_vec;eye_vec.x 0;eye_vec.y 0;eye_vec.z -1;/定义光照方向light_vec new VECTORfn;faces3.v23;faces4.v20;faces5.v25;RotateXx_angle;RotateYy_angle;定义并计算各个面的两条相交的向/旋转调用1计算机学院实体光照模型课程设计报告VECTOR vector62;fori
20、0; i6; i+vectori0CalculateVectorptsfacesi.v0,pts facesi.v1,i ;vectori1CalculateVectorptsfacesi.v0,pts facesi.v2,i ;/计算各个面的外法向量faces0.n VecCrossvector00, vector01;fori0; i6; i+facesi.n VecCrossvectori0, vectori1;/各个面的可见性判定float cos_angle;fori0; i6; i+cos_angle-1.0*InnerProductfacesi.n,eye_vec/GetModu
21、lefacesi.n*GetModuleeye_vec;ifcos_angle0facesi.flagVISIABLE;elsefacesi.flagUNVISIABLE;/计算各个面的中心点fori0; ifn; i+facesi.center.xptsfacesi.v0.x+ptsfacesi.v1.x+ptsfacesi.v2.x+ptsfacesi.v3.1计算机学院实体光照模型课程设计报告x/4.0f ;facesi.center.yptsfacesi.v0.y+ptsfacesi.v1.y+ptsfacesi.v2.y+ptsfacesi.v3.y/4.0f ;facesi.cen
22、ter.zptsfacesi.v0.z+ptsfacesi.v1.z+ptsfacesi.v2.z+ptsfacesi.v3.z/4.0f ;facesi.center.wptsfacesi.v0.w+ptsfacesi.v1.w+ptsfacesi.v2.w+ptsfacesi.v3.w/4.0f;/计算各个面的光照方向fori0; ifn; i+light_veci CalculateVectorilluminant, facesi.center, EOF;/计算各个面的漫反射光强fori0; ifn; i+facesi.IdIp*facesi.kd*-1*InnerProductface
23、si.n,light_veci/GetModulefacesi.n*GetModulelight_veci;/计算各个面环境光反射光强fori0; ifn; i+facesi.Ie facesi.ka*Ia;/计算各个面光强 fori0; ifn; i+1计算机学院实体光照模型课程设计报告facesi.I facesi.Id+facesi.Ie ;/平行投影变换fori0;iptn;i+ptsi.xptsi.x;ptsi.yptsi.y;/窗口-视区变换int aintvxr-vxl/wxr-wxl;int bintvxl-wxl*a;int cintvyt-vyb/wyt-wyb;int d
24、intvyb-wyb*c;fori0;iptn;i+pts2Di.xa*ptsi.x+b;pts2Di.yc*ptsi.y+d;/图形显示CClientDC pdthis;CPoint p4;forint j0; j6; j+iffacesj.flagVISIABLEp0CPointpts2Dfacesj.v0.x,pts2Dfacesj.v0.y;p1CPointpts2Dfacesj.v1.x,pts2Dfacesj.v1.y;p2CPointpts2Dfacesj.v2.x,pts2Dfacesj.v2.y;1计算机学院实体光照模型课程设计报告p3CPointpts2Dfacesj.v3
25、.x,pts2Dfacesj.v3.y;/dc.SelectObjectpOld; /把画笔设置为原来的CBrush Brush;DKGRAY_BRUSH,RGB64,64,64;Brush.CreateSolidBrushRGBfacesj.I*255,facesj.I*255,facesj.I* 255+40;pd.SelectObject&Brush;pd.BeginPath;pd.MoveTop0;forint i1;i4;i+pd.LineTopi;pd.LineTop0;pd.EndPath;pd.FillPath;Brush.DeleteObject;void CDraw
26、3DView二RotateXintangle/ 绕 x 轴逆时针旋转float aangle*PI/180;forint i0;iptn;i+float y,z;yptsi.y; zptsi.z;ptsi.yy*cosa-z*sina;ptsi.zy*sina+z*cosa;void CDraw3DView:RotateYintangle 绕y轴逆时针旋转1计算机学院实体光照模型课程设计报告float bangle*PI/180;forint i0;iptn;i+float x,z;xptsi.x; zptsi.z;ptsi.xx*cosb+z*sinb;ptsi.z-x*sinb+z*cosb;VECTOR CDraw3DView:CalculateVectorHOMOCOORDstart,HOMOCOORD end, int face计算一个3维向量的函数,从start点指向end点的属于face面的向量VECTOR tempVector;tempVector.xend.x-start.x;tempVector.yend.y-start.y
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 河北省承德市NT20名校联合体2024-2025学年高三下学期3月月考政治试题(原卷版+解析版)
- 2024-2025学年七年级道德与法治上册 第一单元 成长的节拍 第三课 发现自己 第1框《认识自己》教学实录 新人教版
- 辽宁2025年辽宁省事业单位集中招聘11438人笔试历年参考题库附带答案详解
- 企业文化的传播与沟通
- 企业创新文化的评估与优化
- 2024-2025学年新教材高中英语 Unit 3 The internet导读 话题妙切入教学实录 新人教版必修第二册
- 兼职设备维修兼职合同标准文本
- 全日语合同标准文本
- 2024年四川省资阳市中考数学试卷【含解析】
- 中小企业成本管理与策略探讨
- 企业主要负责人安全培训试题及答案 完整
- 七年级数学新北师大版(2024)下册第一章《整式的乘除》单元检测习题(含简单答案)
- 2024员工质量意识培训
- 私募股权投资基金研究报告(131张幻灯片)课件
- 陈氏十八式太极拳教案
- 红色卡通风区三好学生竞选演讲图文PPT教学课件
- 北京市统一医疗服务收费标准(大红本)
- 经纬度数转换工具
- 导向系统设计(课堂PPT)
- 混凝土凝结时间计算及报告(样表)
- 高中生物 第4节细胞的癌变课件 新人教版必修1
评论
0/150
提交评论