优秀的毕业设计论文网
计算机 JAVA 电子信息 单片机 机械机电 模具 土木工程 建筑结构 论文
热门搜索词:网络 ASP.NET 汽车 电气 数控 PLC

光线跟踪算法的研究与实现

以下是资料介绍,如需要完整的请充值下载.
1.无需注册登录,支付后按照提示操作即可获取该资料.
2.资料以网页介绍的为准,下载后不会有水印.资料仅供学习参考之用.
  
资料介绍:
Phong光照明模型
1975年,Phong在Comm.ACM上发表论文,提出图形学中第一个有影响的光照明模型[10]。Phong模型虽然只是一个经验模型,但是其实现的真实感已达到人们可以满意的程度。
光照到物体表面时,物体对光会发生反射、透射、吸收、衍射、折射和干涉。简单光照明模型模拟物体表面对光的反射作用,光源被假定为点光源,反射作用被细分为镜面反射和漫反射。简单光照明模型只考虑物体对直接光照的反射作用,而物体间的光反射作用,只用环境光来表示,Phong光照明模型就是这样的一种模型。
整体光照模型
根据前面的光照模型的介绍,简单光照明模型虽然可以产生物体的真实感图像,但它们都只是处理光源直接照射物体表面的光强计算,不能很好的模拟光的折射、反射和阴影等,也不能用来表示物体间的相互光照明影响;而基于简单光照明模型的光透射模型,虽然可以模拟光的折射,但是这种折射的计算范围很小,不能很好的模拟多个透明体之间的复杂光照明现象。
对于上述的这些问题,就必须要有一个更精确的光照明模型。整体光照明模型就是这样的一种模型[12],它是相对于局部光照明模型而言的。在现有的整体光照明模型中,主要有光线跟踪和辐射度两种方法,它们是当今真实感图形学中最重要的两个图形绘制技术,在CAD及图形学领域得到了广泛的应用。 think58.com [资料来源:http://THINK58.com]
1980年Whitted提出的光透射模型就是一个整体光照模型[13],并且第一次给出光线跟踪算法的范例,实现了Whitted模型。1983年Hall在此基础上进一步给出了Hall光透射模型,考虑了漫透射和规律透射光。Whitted光透射模型,简单点说就是在简单光照明模型的基础上,加上透射光这一项,多考虑了一层。
以图2.8为例,从视点观察到的物体A表面的亮度来源于三方面的贡献:
(1)光源直接照射到A的表面,然后被反射到人眼中的光产生的。
(2)光源或其它物体的光经A物体折射到人眼中的光产生的。
(3)物体B的表面将光反射到物体A的表面,再经物体A的表面反射到人眼中产生的。
简单局部光照明模型仅考虑了(1)。
本论文最后实现的光线跟踪的基本场景中的模型,就是这种整体的光照模型,但是仅仅考虑了理想状况下的反射情况。
光线跟踪算法的基本原理
上一章介绍了一些光线跟踪算法中相关联的一些基础知识,包括几何光学中的三大定律,光在传播过程中发生的漫反射,镜面反射等等,还介绍了简单光照模型和整体光照模型。本章则在这些基础上介绍光线跟踪算法的基本原理以及光线跟踪的过程。
由光源发出的光到达物体表面后,产生反射和折射,简单光照明模型和光透射模型模拟了这两种现象。在简单光照明模型中,反射被分为理想漫反射和镜面反射光,在简单光透射模型把透射光分为理想漫透射光和规则透射光。由光源发出的光称为直接光,物体对直接光的反射或折射称为直接反射和直接折射,相对的,把物体表面间对光的反射和折射称为间接光,间接反射,间接折射。这些是光线在物体之间的传播方式,是光线跟踪算法的基础。

think58好,好think58

[资料来源:http://www.THINK58.com]


最基本的光线跟踪算法是跟踪光线的镜面反射和折射。从光源发出的光遇到物体的表面,发生反射和折射,光就改变方向,沿着反射方向和折射方向继续前进,直到遇到新的物体。但是光源发出光线,经反射与折射,只有很少部分可以进入人的眼睛。因此实际光线跟踪算法的跟踪方向与光传播的方向是相反的,是一种视线跟踪法。由视点与象素(x,y)发出一根射线,与第一个物体相交后,在其反射与折射方向上进行跟踪。
本文算法实现的思想
在VC6.0开发环境下,应用Windows基础画图编程,创建一个MFC对话框架,此框架可以控制光源在场景中的位置,还可以开始和终止光线跟踪。
首先创建一个场景,背景色为黑色。在场景中创建若干个不透明的实体球,以及一个可变动坐标的光源了。为了使过程更加逼真,对球体进行旋转操作。
通过双重循环扫描,再单重循环定位,对场景中的球体进行检测是否相交,并求出最近的交点。
计算该点光强度,通过计算结果,对该球体进行阴影渲染操作,使之更具有真实感。
通过循环使大量的位图每秒以一定的帧数不停地显示,最后输出显示结果,实现在单一场景中的基于简单光照模型下的光线跟踪,进而增加场景中物体的真实感,并且给人一种连续的动态的感觉。
程序设计的两个主要的类,分别是: copyright think58

[资料来源:www.THINK58.com]


1、CDib:主要的windows底层画图类。包括内存文件分配,基本画图工具等。
2、CRayTracerDlg:这个类是最为主要的。包括构造场景、构造光源、构造物体,以及最后的实现光线跟踪的过程方法,并能渲染生成单一位图、连续显示等。
程序中两个最关键的函数为:OnDemo()和TraceScene()。
OnDemo()函数是整程序的入口,负责开始演示程序到结束。以下是OnDemo()函数的伪代码。
OnDemo()
{ 定义3个球体Spheres[3]
创建开始的射线数组GenerateRayDirectionTable;
//如下列形式构造3个球,其中Center为中心,Radius为半径,Color为颜色。
Spheres[1/2/3].Center.X[/Y/Z] = 0;
Spheres[1/2/3].Radius = 0;
Spheres[1/2/3].Color.R[/G/B] = 0;
//构造视角,相当与人的眼睛的位置坐标
视角.X[Y/Z] = 0;
//光线位置
光线.X[Y/Z] = 100;
定义消息msg;
while(图象显示)
{ //旋转球体
for(球体个数)
{ 旋转函数(旋转参数); }
光线跟踪函数(球,光线位置);  //场景跟踪函数
画图函数(…);
while (当有一条开始消息)
{ if (中断信息)
{ 中止跟踪; }
[版权所有:http://think58.com]