用c语言设计实体光照模型报告大学论文
学号《》
课程设计报告
用C语言设计实体光照模型专业:班级:姓名:指导教师:成绩:
计算机学院
2017年4月25日
目录
课程设计题目:实体光照模型
一 需求分析2
二 总体设计2
三 详细设计3
四 源代码11
一 需求分析
如对长方体,建立一个点光源,采用环境光和点光源漫反射光的光照模型,应用FLAT明暗处理方法,显示平行投影后的长方体光照效果。
二 总体设计
图形介绍
三 详细设计
1、原理
光照模型是真实感图形技术的重要组成部分,它主要研究的是如何根据光学物理的有关定律,采用计算机来模拟自然界中光照明的物理过程。本文通过对光源特性和物体表面特性、局部光照模型和整体光照模型的具体分析,完成对光照模型的 系统阐述。
关键词:光源特性、局部光照模型、全局光照模型、真实感图形
2、详细分支
定义三维齐次坐标结构和面的结构;定义顶点表和面表,对长方体绕X轴旋转和绕Y轴旋转。
对每一个面计算其外法向量及可见性
对每个可见面计算其光线向量,并判断其是否为背光面。
计算每个见光面的环境光和点光源的漫反射分量。
用该面的光强显示该可见面
3、设计介绍
(1)旋转变换
绕X轴旋转变换的坐标表示
绕Y轴旋转变换的坐标表示
(2) 平行投影
在XOY平面投影后坐标
(3) 环境光模型
物体没有受到光源的直射,但其表面仍有一定亮度,这是由于环境光的作用。
表示环境光反射强度
表示环境光反射率
表示环境光入射强度
(4)漫反射光模型
漫反射光可认为是在点光源的照射下,光被物体表面吸收后,然后重新反射出来的光。
表示漫反射光强度
表示漫反射反射率
表示点光源入射强度大小
入射光与物体表面法矢量夹角
4、定义结构及分析
(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)长方体顶点定义及初始化
ptsnew HOMOCOORD[ptn]
{
pts[0].x 1;pts[0].y 2; pts[0].z 1; pts[0].w1;
pts[1].x -1; pts[1].y 2; pts[1].z 1; pts[1].w1;
pts[2].x -1; pts[2].y -2;pts[2].z 1; pts[2].w1;
pts[3].x 1;pts[3].y -2;pts[3].z 1; pts[3].w1;
pts[4].x 1;pts[4].y 2; pts[4].z -1; pts[4].w1;
pts[5].x -1; pts[5].y 2; pts[5].z -1; pts[5].w1;
pts[6].x -1; pts[6].y -2;pts[6].z -1; pts[6].w1;
pts[7].x 1;pts[7].y -2;pts[7].z -1; pts[7].w1;
};
(6)面表
fn6;
facesnew PLANE[fn];
faces[0].v00; faces[0].v11; faces[0].v22; faces[0].v3