长方体体的光照效果_计算机图形学课程设计 精品
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
西安科技大学
计算机图形学课程设计
题目:长方体体的光照效果
专业班级:信计1102班
小组成员:陈维多1108060216
邹世林1108060224
左力1108060225
李优1108060229 日期: 2013年1月2日
目录
一课程设计题目 (3)
1.题目要求 (3)
2.任务 (3)
二任务分析算法介绍 (3)
1.任务分析 (3)
2.算法介绍 (4)
三总体设计 (5)
1.定义三维齐次向量结构体 (5)
2.定义三维齐次坐标结构 (5)
3.定义面的结构 (6)
4.定义点的结构 (6)
5.长方体顶点定义及初始化 (7)
6. 面表 (7)
7.定义点光源、视线方向、光照方向 (8)
8.各面可见性计算和判断 (9)
9.窗口-视区变换 (11)
10.路径填充 (12)
四流程图 (13)
五源程序 (14)
六程序运行效果图 (27)
七总结 (28)
参考文献 (29)
一、课程设计题目
长方体体的光照效果
1.题目要求
对长方体,建立一个点光源,采用环境光和点光源漫反射光的光照模型,应用FLAT明暗处理方法,显示平行投影后的
长方体光照效果。
2.任务
本题目主要包括五个任务,
1)长方体表面模型的建立
2)长方体的可见面判断
3)可见面的背光性判断
4)可见面光照计算
5)可见面光照效果显示
附加:通过键盘上下左右按键对图形进行旋转
二、任务分析算法介绍
1.任务分析
任务1)中,定义三维齐次坐标结构和面的结构;定义顶点表和面表,对长方体绕X轴旋转和绕Y轴旋转。
任务2)中对每一个面计算其外法向量及可见性
任务3)中对每个可见面计算其光线向量,并判断其是否为背光面。
任务4)计算每个见光面的环境光和点光源的漫反射分量。
任务5)用该面的光强显示该可见面
附加: 人机交互
2.算法介绍
1)旋转变换
绕X 轴旋转变换的坐标表示⎪⎩
⎪⎨⎧+='-='='ββββcos sin sin cos Z Y Z Z Y Y X X 绕Y 轴旋转变换的坐标表示⎪⎩
⎪⎨⎧-='='+='ββββsin cos cos sin X Z Z Y Y X Z X 2) 平行投影
在XOY 平面投影后坐标⎪⎩
⎪⎨⎧='='='0Z Y Y X X 3) 环境光模型
物体没有受到光源的直射,但其表面仍有一定亮度,这是由于环境光的作用。
10,*<==<=a a a e k I k I
e I 表示环境光反射强度
a k 表示环境光反射率
a I 表示环境光入射强度
4)漫反射光模型
漫反射光可认为是在点光源的照射下,光被物体表面吸收后,然后重新反射出来的光。
2/0,10,cos **πθθ<==<<==<=d p d d k I k I d I 表示漫反射光强度
d k 表示漫反射反射率
p I 表示点光源入射强度大小
θ入射光与物体表面法矢量夹角
三、总体设计
1.定义三维齐次向量结构体
typedef struct Vector3D
{
float x;
float y;
float z;
int f; //f 表示所在的平面的编号
}VECTOR;
2. 定义三维齐次坐标结构
typedef struct tagHOMOCOORD
{
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.长方体顶点定义及初始化
pts=new HOMOCOORD[ptn];
pts[0].x= 1; pts[0].y= 2; pts[0].z= 1; pts[0].w=1;
pts[1].x= -1; pts[1].y= 2; pts[1].z= 1; pts[1].w=1;
pts[2].x= -1; pts[2].y= -2; pts[2].z= 1; pts[2].w=1;
pts[3].x= 1; pts[3].y= -2; pts[3].z= 1; pts[3].w=1;
pts[4].x= 1; pts[4].y= 2; pts[4].z= -1; pts[4].w=1;
pts[5].x= -1; pts[5].y= 2; pts[5].z= -1; pts[5].w=1;
pts[6].x= -1; pts[6].y= -2; pts[6].z= -1; pts[6].w=1;
pts[7].x= 1; pts[7].y= -2; pts[7].z= -1; pts[7].w=1;
6.面表
fn=6;
faces=new PLANE[fn];
faces[0].v0=0; faces[0].v1=1; faces[0].v2=2; faces[0].v3=3; faces[1].v0=4; faces[1].v1=5; faces[1].v2=1; faces[1].v3=0; faces[2].v0=5; faces[2].v1=6; faces[2].v2=2; faces[2].v3=1; faces[3].v0=6; faces[3].v1=7; faces[3].v2=3; faces[3].v3=2; faces[4].v0=7; faces[4].v1=4; faces[4].v2=0; faces[4].v3=3; faces[5].v0=7; faces[5].v1=6; faces[5].v2=5; faces[5].v3=4;