资源预览内容
第1页 / 共13页
第2页 / 共13页
第3页 / 共13页
第4页 / 共13页
第5页 / 共13页
第6页 / 共13页
第7页 / 共13页
第8页 / 共13页
第9页 / 共13页
第10页 / 共13页
亲,该文档总共13页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
实体光照模型课程名称实体光照模型课程名称 课程设计报告课程设计报告 题目:用 C 语言设计实体光照模型 专业: 班级: 姓名: 指导教师: 成绩: 计算机学院计算机学院 20172017 年年 4 4 月月 2525 日日 学号学号 2016-2017 学年学年 第第 2 学期学期 计算机学院 实体光照模型课程设计报告 1 目录目录 课程设计题目:实体光照模型课程设计题目:实体光照模型 一一 需求分析需求分析 2 二二 总体设计总体设计 2 三三 详细设计详细设计 3 四四 源代码源代码11 一一 需求分析需求分析 如对长方体,建立一个点光源,采用环境光和点光源漫反射光 的光照模型,应用 FLAT 明暗处理方法,显示平行投影后的长方体光 照效果。 二二 总体设计总体设计 图形介绍图形介绍 光照模型效果图 表面表面 模型模型 可见可见 面判断面判断 可见面背可见面背 光性判断光性判断 可见面可见面 光照计算光照计算 计算机学院 实体光照模型课程设计报告 1 三三 详细设计详细设计 1 1、原理、原理 光照模型是真实感图形技术的重要组成部分,它主要研究的是如何根据光 学物理的有关定律,采用计算机来模拟自然界中光照明的物理过程。本文通过 对光源特性和物体表面特性、局部光照模型和整体光照模型的具体分析,完成 对光照模型的 系统阐述。 关键词:光源特性、局部光照模型、全局光照模型、真实感图形 2 2、详细分支、详细分支 定义三维齐次坐标结构和面的结构;定义顶点表和面表,对长方体绕 X 轴 旋转和绕 Y 轴旋转。 对每一个面计算其外法向量及可见性 对每个可见面计算其光线向量,并判断其是否为背光面。 计算每个见光面的环境光和点光源的漫反射分量。 用该面的光强显示该可见面 3 3、设计介绍、设计介绍 (1)旋转变换 绕 X 轴旋转变换的坐标表示 绕 Y 轴旋转变换的坐标表示 (2) 平行投影 在 XOY 平面投影后坐标 (3) 环境光模型 物体没有受到光源的直射,但其表面仍有一定亮度,这是由于环境光的作用。 表示环境光反射强度 表示环境光反射率 表示环境光入射强度 (4)漫反射光模型 漫反射光可认为是在点光源的照射下,光被物体表面吸收后,然后重新反射 出来的光。 表示漫反射光强度 表示漫反射反射率 表示点光源入射强度大小 入射光与物体表面法矢量夹角 4 4、定义结构及分析、定义结构及分析 计算机学院 实体光照模型课程设计报告 1 (1)定义三维齐次向量结构体 typedeftypedef structstruct Vector3DVector3D floatfloat x;x; floatfloat y;y; floatfloat z;z; intint f;f; /f/f 表示所在的平面的编号表示所在的平面的编号 VECTOR;VECTOR; ; (2) 定义三维齐次坐标结构 typedeftypedef structstruct tagHOMOCOORDtagHOMOCOORD floatfloat x;x; floatfloat y;y; floatfloat z;z; floatfloat w;w; HOMOCOORD;HOMOCOORD; ; (3)定义面的结构 typedeftypedef structstruct tagPLANEtagPLANE intint v0,v0, v1,v1, v2,v2, v3;v3; VECTORVECTOR n;n; /外法向量外法向量 HOMOCOORDHOMOCOORD center;center; /中心点中心点 floatfloat Id;Id; /漫反射光强漫反射光强 intint flag;flag; /标识符标识符 floatfloat kd;kd; /漫反射率漫反射率 floatfloat ka;ka; /环境光反射率环境光反射率 floatfloat Ie;Ie; /环境光反射光强环境光反射光强 floatfloat I;I; /光强光强 PLANE;PLANE; ; (4)定义点的结构 typedeftypedef structstruct tagMYPOINTtagMYPOINT floatfloat x,y;x,y; MYPOINT;MYPOINT; ; (5)长方体顶点定义及初始化 ptsnewptsnew HOMOCOORDptnHOMOCOORDptn 计算机学院 实体光照模型课程设计报告 1 pts0.xpts0.x 1;1;pts0.ypts0.y 2;2; pts0.zpts0.z 1;1; pts0.w1;pts0.w1; pts1.xpts1.x -1;-1; pts1.ypts1.y 2;2; pts1.zpts1.z 1;1; pts1.w1;pts1.w1; pts2.xpts2.x -1;-1; pts2.ypts2.y -2;pts2.z-2;pts2.z 1;1; pts2.w1;pts2.w1; pts3.xpts3.x 1;1;pts3.ypts3.y -2;pts3.z-2;pts3.z 1;1; pts3.w1;pts3.w1; pts4.xpts4.x 1;1;pts4.ypts4.y 2;2; pts4.zpts4.z -1;-1; pts4.w1;pts4.w1; pts5.xpts5.x -1;-1; pts5.ypts5.y 2;2; pts5.zpts5.z -1;-1; pts5.w1;pts5.w1; pts6.xpts6.x -1;-1; pts6.ypts6.y -2;pts6.z-2;pts6.z -1;-1; pts6.w1;pts6.w1; pts7.xpts7.x 1;1;pts7.ypts7.y -2;pts7.z-2;pts7.z -1;-1; pts7.w1;pts7.w1; ; (6)面表 fn6;fn6; facesnewfacesnew PLANEfn;PLANEfn; faces0.v00;faces0.v00; faces0.v11;faces0.v11; faces0.v22;faces0.v22; faces0.v33;faces0.v33; faces1.v04;faces1.v04; faces1.v15;faces1.v15; faces1.v21;faces1.v21; faces1.v30;faces1.v30; faces2.v05;faces2.v05; faces2.v16;faces2.v16; faces2.v22;faces2.v22; faces2.v31;faces2.v31; faces3.v06;faces3.v06; faces3.v17;faces3.v17; faces3.v23;faces3.v23; faces3.v32;faces3.v32; faces4.v07;faces4.v07; faces4.v14;faces4.v14; faces4.v20;faces4.v20; faces4.v33;faces4.v33; faces5.v07;faces5.v07; faces5.v16;faces5.v16; faces5.v25;faces5.v25; faces5.v34;faces5.v34; (7)定义点光源、视线方向、光照方向 1、点光源 illuminant.xilluminant.x -100;-100; illuminant.yilluminant.y -100;-100; illuminant.zilluminant.z 100;100; IaIa 0.5;0.5; /环境光入射强度环境光入射强度 IpIp 0.5;0.5; /漫反射入射光强漫反射入射光强度度 2、视线方向 VECTORVECTOR eye_vec;eye_vec; eye_vec.xeye_vec.x 0;0; eye_vec.yeye_vec.y 0;0; eye_vec.zeye_vec.z -1;-1; 3、定义光照方向 light_veclight_vec newnew VECTORfn;VECTORfn; VECTORVECTOR vector62vector62 ; ; fori0;fori0; i6;i6; i+i+ vectori0vectori0 CalculateVectorptsfacesi.v0,CalculateVectorptsfacesi.v0, ptspts facesi.v1,facesi.v1, i i ; ; 计算机学院 实体光照模型课程设计报告 1 vectori1vectori1 CalculateVectorptsfacesi.v0,CalculateVectorptsfacesi.v0, ptspts facesi.v2,facesi.v2, i i ; ; (8)各面可见性计算和判断 1、计算各个面的外法向量 faces0.nfaces0.n VecCrossvector00,VecCrossvector00, vector01vector01 ; ; fori0;fori0; i6;i6; i+i+ facesi.nfacesi.n VecCrossvectori0,VecCrossvectori0, vectori1vectori1 ; ; 2、各个面的可见性判定 floatfloat cos_angle;cos_angle; fori0;fori0; i6;i6; i+i+ cos_anglecos_angle -1.0*InnerProductfacesi.n,-1.0*InnerProductfacesi.n, eye_vec/GetModulefacesi.n*GetModuleeye_vec;eye_vec/GetModulefacesi.n*GetModuleeye_vec; ifcos_angle0ifcos_angle0 facesi.flagfacesi.flag VISIABLE;VISIABLE; elseelse facesi.flagfacesi.flag UNVISIABLE;UNVISIABLE; 3、计算各个面的中心点 fori0;fori0; ifn;ifn; i+i+ facesi.center.xfacesi.center.x ptsfacesi.v0.x+ptsfacesi.v1.x+ptsfacesi.v2.x+ptsfa
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号