c用C语言设计实体光照模型课程设计报告.docx

上传人:b****4 文档编号:1031613 上传时间:2022-10-15 格式:DOCX 页数:17 大小:41.04KB
下载 相关 举报
c用C语言设计实体光照模型课程设计报告.docx_第1页
第1页 / 共17页
c用C语言设计实体光照模型课程设计报告.docx_第2页
第2页 / 共17页
c用C语言设计实体光照模型课程设计报告.docx_第3页
第3页 / 共17页
c用C语言设计实体光照模型课程设计报告.docx_第4页
第4页 / 共17页
c用C语言设计实体光照模型课程设计报告.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

c用C语言设计实体光照模型课程设计报告.docx

《c用C语言设计实体光照模型课程设计报告.docx》由会员分享,可在线阅读,更多相关《c用C语言设计实体光照模型课程设计报告.docx(17页珍藏版)》请在冰豆网上搜索。

c用C语言设计实体光照模型课程设计报告.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1