c用C语言设计实体光照模型课程设计报告.docx
- 文档编号:1031613
- 上传时间:2022-10-15
- 格式:DOCX
- 页数:17
- 大小:41.04KB
c用C语言设计实体光照模型课程设计报告.docx
《c用C语言设计实体光照模型课程设计报告.docx》由会员分享,可在线阅读,更多相关《c用C语言设计实体光照模型课程设计报告.docx(17页珍藏版)》请在冰豆网上搜索。
c用C语言设计实体光照模型课程设计报告
2016-2017学年第2学期
《实体光照模型课程名称》
课程设计报告
题目:
专业:
用C语言设计实体光照模型网络工程(对口)
班级:
16(3)
姓名:
指导教师:
成绩:
聂代应豪
代美丽
计算机学院2017年4月25日
计算机学院《实体光照模型》课程设计报告
课程设计题目:
实体光照模型
一需求分析....................................................................................................................................2
二总体设计....................................................................................................................................2
三详细设计....................................................................................................................................3
四源代码......................................................................................................................................11
一需求分析
如对长方体,建立一个点光源,采用环境光和点光源漫反射光
的光照模型,应用FLAT明暗处理方法,显示平行投影后的长方体光照效果。
二总体设计
图形介绍
1
计算机学院《实体光照模型》课程设计报告
三详细设计
1、原理
光照模型是真实感图形技术的重要组成部分,它主要研究的是如何根据光学物理的有关定律,采用计算机来模拟自然界中光照明的物理过程。
本文通过对光源特性和物体表面特性、局部光照模型和整体光照模型的具体分析,完成对光照模型的系统阐述。
关键词:
光源特性、局部光照模型、全局光照模型、真实感图形
2、详细分支
定义三维齐次坐标结构和面的结构;定义顶点表和面表,对长方体绕X轴旋转和绕Y轴旋转。
对每一个面计算其外法向量及可见性
对每个可见面计算其光线向量,并判断其是否为背光面。
计算每个见光面的环境光和点光源的漫反射分量。
用该面的光强显示该可见面
3、设计介绍
(1)旋转变换
绕X轴旋转变换的坐标表示
绕Y轴旋转变换的坐标表示
(2)平行投影
在XOY平面投影后坐标
(3)环境光模型
物体没有受到光源的直射,但其表面仍有一定亮度,这是由于环境光的作用。
表示环境光反射强度
表示环境光反射率
表示环境光入射强度
(4)漫反射光模型
漫反射光可认为是在点光源的照射下,光被物体表面吸收后,然后重新反射出来的光。
表示漫反射光强度
表示漫反射反射率
表示点光源入射强度大小
入射光与物体表面法矢量夹角
4、定义结构及分析
1
计算机学院《实体光照模型》课程设计报告
(1)定义三维齐次向量结构体
typedefstructVector3D
{floatx;
floaty;
floatz;
intf;//f表示所在的平面的编号VECTOR;
};
(2)定义三维齐次坐标结构
typedefstructtagHOMOCOORD
{floatx;
floaty;
floatz;
floatw;
HOMOCOORD;
};
(3)定义面的结构
typedefstructtagPLANE
{intv0,v1,v2,v3;
VECTORn;//外法向量HOMOCOORDcenter;//中心点floatId;//漫反射光强
1
计算机学院《实体光照模型》课程设计报告
intflag;//标识符
floatkd;//漫反射率
floatka;//环境光反射率
floatIe;//环境光反射光强
floatI;//光强
PLANE;
};
(4)定义点的结构
typedefstructtagMYPOINT
{floatx,y;
MYPOINT;
};
(5)长方体顶点定义及初始化
ptsnewHOMOCOORD[ptn]
{
pts[0].x1;pts[0].y2;pts[0].z1;pts[0].w1;pts[1].x-1;pts[1].y2;pts[1].z1;pts[1].w1;pts[2].x-1;pts[2].y-2;pts[2].z1;pts[2].w1;pts[3].x1;pts[3].y-2;pts[3].z1;pts[3].w1;pts[4].x1;pts[4].y2;pts[4].z-1;pts[4].w1;pts[5].x-1;pts[5].y2;pts[5].z-1;pts[5].w1;
1
计算机学院《实体光照模型》课程设计报告
pts[6].x-1;pts[6].y-2;pts[6].z-1;pts[6].w1;
pts[7].x1;pts[7].y-2;pts[7].z-1;pts[7].w1;
};
(6)面表
fn6;
facesnewPLANE[fn];
faces[0].v00;faces[0].v11;faces[0].v22;faces[0].v33;
faces[1].v04;faces[1].v15;faces[1].v21;faces[1].v30;
faces[2].v05;faces[2].v16;faces[2].v22;faces[2].v31;
faces[3].v06;faces[3].v17;faces[3].v23;faces[3].v32;
faces[4].v07;faces[4].v14;faces[4].v20;faces[4].v33;
faces[5].v07;faces[5].v16;faces[5].v25;faces[5].v34;
(7)定义点光源、视线方向、光照方向1、点光源
illuminant.x-100;
illuminant.y-100;
illuminant.z100;
Ia0.5;//环境光入射强度Ip0.5;//漫反射入射光强度2、视线方向
VECTOReye_vec;
1
计算机学院《实体光照模型》课程设计报告
eye_vec.x0;
eye_vec.y0;
eye_vec.z-1;
3、定义光照方向
light_vecnewVECTOR[fn];
VECTORvector[6][2];
fori0;i6;i++
vector[i][0]CalculateVectorpts[faces[i].v0],pts[faces[i].v1],i;vector[i][1]CalculateVectorpts[faces[i].v0],pts[faces[i].v2],i;
(8)各面可见性计算和判断
1、计算各个面的外法向量
faces[0].nVecCrossvector[0][0],vector[0][1];
fori0;i6;i++
faces[i].nVecCrossvector[i][0],vector[i][1];
2、各个面的可见性判定floatcos_angle;
fori0;i6;i++
1
计算机学院《实体光照模型》课程设计报告
cos_angle
-1.0*InnerProductfaces[i].n,
eye_vec/GetModulefaces[i].n*GetModuleeye_vec;
ifcos_angle0
faces[i].flagVISIABLE;
else
faces[i].flagUNVISIABLE;
3、计算各个面的中心点
fori0;ifn;i++
faces[i].center.x
pts[faces[i].v0].x+pts[faces[i].v1].x+pts[faces[i].v2].x+pts[faces[i].v3].
x/4.0f;
faces[i].center.y
pts[faces[i].v0].y+pts[faces[i].v1].y+pts[faces[i].v2].y+pts[faces[i].v3].
y/4.0f;
faces[i].center.z
pts[faces[i].v0].z+pts[faces[i].v1].z+pts[faces[i].v2].z+pts[faces[i].v3].
z/4.0f;
faces[i].center.w
pts[faces[i].v0].w+pts[faces[i].v1].w+pts[faces[i].v2].w+pts[faces[i].
v3].w/4.0f;
1
计算机学院《实体光照模型》课程设计报告
4、计算各个面的光照方向
fori0;ifn;i++
light_vec[i]CalculateVectorilluminant,faces[i].center,EOF;5、计算各个面的漫反射光强
fori0;ifn;i++
faces[i].IdIp*faces[i].kd*-1*InnerProductfaces[i].n,
light_vec[i]/GetModulefaces[i].n*GetModulelight_vec[i];
6、计算各个面环境光反射光强
fori0;ifn;i++
faces[i].Iefaces[i].ka*Ia;
7、计算各个面光强(漫反射光强和环境反射光强之和)
fori0;ifn;i++
faces[i].Ifaces[i].Id+faces[i].Ie;
//窗口-视区变换实现过程
1
计算机学院《实体光照模型》课程设计报告
floatwxl-5,wxr5,wyb-5,wyt5;
intvxl0,vxr800,vyb0,vyt600;
(9)窗口-视区变换
intaintvxr-vxl/wxr-wxl;
intbintvxl-wxl*a;
intcintvyt-vyb/wyt-wyb;
intdintvyb-wyb*c;
fori0;iptn;i++
pts2D[i].xa*pts[i].x+b;
pts2D[i].yc*pts[i].y+d;
(10)路径填充
CBrush
Brush;Brush.CreateSolidBrushRGBfaces[j].I*255,faces[j].I*255,faces[j].
I*255+40;
pd.SelectObject&Brush;
pd.BeginPath;
pd.MoveTop[0];
forinti1;i4;i++
1
计算机学院《实体光照模型》课程设计报告
pd.L
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 设计 实体 光照 模型 课程设计 报告