光线追踪(RayTracing)算法描述.doc

光线追踪(RayTracing)算法描述.doc

ID:27848713

大小:346.00 KB

页数:12页

时间:2018-12-06

光线追踪(RayTracing)算法描述.doc_第1页
光线追踪(RayTracing)算法描述.doc_第2页
光线追踪(RayTracing)算法描述.doc_第3页
光线追踪(RayTracing)算法描述.doc_第4页
光线追踪(RayTracing)算法描述.doc_第5页
资源描述:

《光线追踪(RayTracing)算法描述.doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、光线追踪(RayTracing)算法描述  一、理论基础  1、三维场景中创建图像  第一步:透视投影。这是一个将三维物体的形状投影到图像表面上的几何过程,这一步只需要连接从对象特征到眼睛之间的线,然后在画布上绘制这些投影线与图像平面相交的轮廓。  第二步:添加颜色。图像轮廓绘制好之后,给它的骨架添加颜色,这样就完成了三维场景中的图像创建过程。      2、物体的颜色和亮度  •主要是光线与物体材质相互作用的结果。  •光由光子(电磁粒子)组成,光子由各种光源发射。当一组光子撞击一个物体时,可能发生三

2、种情况:被吸收,反射或透射。发生这三种情况的光子百分比因材料而异,通常决定了物体在场景中的显现方式。然而,所有材料都有一个共性:入射光子总数总是与反射光子、吸收光子、透射光子的总和相同。  •白光由“红”、“蓝”、“绿”三种颜色光子组成。当白光照亮红色物体时,光子吸收过程会过滤掉“绿色”和“蓝色”光子。因为物体不吸收“红色”光子,所以它们将被反射,这就是物体呈现红色的原因。  •我们之所以能够看到物体,是因为物体反射的一些光子向我们传播并击中了我们的眼睛。我们的眼睛由光感受器组成,可以将光信号转换为神经

3、信号,然后我们的大脑能够使用这些信号来辨别不同的阴影和色调。  3、光与物体的关系  •没有光线,我们都看不到周围的物体。  •周围环境中没有物体,我们看不到光。  二、光线追踪(RayTracing)算法描述  1、ForwardTracing  在用计算机生成的图像中模拟光与物体相互作用过程之前,我们需要了解一个物理现象。一束光线照射在物体上时,反射的光子中只有少数会到达我们眼睛的表面。想象一下,假设有一个每次只发射一个光子的光源,光子从光源发出并沿着直线路径行进,直至撞击到物体表面,忽略光子的吸收

4、,该光子会以随机的方向反射。如果光子撞击到我们的眼睛表面,则我们会看到光子被反射的点。具体过程如下图所示。    现在从计算机图形的角度来看待这种情况。首先,我们用像素组成的平面代替我们的眼睛。在这种情况下,发射的光子将撞击图形平面上许多像素的一个,并将该点的亮度增加到大于零的值。重复多次直到所有的像素被调整,创建一个计算机生成的图像。这种技术称为前向光线追踪(ForwardTracing),因为我们是沿着光子从光源向观察者的前进的路径。    但是,这种技术在计算机中模拟光子与物体相互作用是不太现实的

5、,因为在实际中反射的光子击中眼睛表面的可能性是非常非常低的,我们必须投射大量的光子才能找到一个能够引起眼睛注意的。此外,我们也不能保证物体的表面被光子完全覆盖,这是这项技术的主要缺点。  换句话说,我们可能不得不让程序一直运行,直到足够的光子喷射到物体的表面上获得精确的显示。这意味着我们要监视正在呈现的图像以决定何时停止应用程序。这在实际生产环境中是不可能的。另外,正如我们将看到的,射线追踪器中最昂贵的任务是找到射线几何交点。从光源产生大量光子不是问题,但是在场景内找到所有的交点将会是非常昂贵的。  2

6、、BackwardTracing  这项技术为前向光线追踪技术的缺陷提供了一个方便的解决方案。由于我们的模拟不能像自然一样快速完美,所以我们必须妥协,并追踪从眼睛进入到场景中的光线。  光线照到一个物体时,我们可以通过将另一条光线(称为光线或阴影光线)从击中点投射到场景的光线,得到它所接受到的光子数量。这个“光线”有的时候会被另一个物体阻挡,这意味着我们原来的撞击点在阴影中,没有获得任何照明。    三、算法实现  1、基本原理  •光线追踪算法采用由像素组成的图像。对于图像中的每个像素,它将主光线投射

7、到场景中。该主光线的方向是通过追踪从眼睛到像素中心线获得的。一旦我们确定了主射线的方向,我们就开始检查场景中的每个对象,看它是否与其中的任何一个相交。当发生主射线与多个对象相交的情况时,我们选择交点离眼睛最近的物体。  •然后,我们从交叉点向光线投射阴影射线。如果这条特定的光线在通往光源的路上不与某个物体相交,那么这个点就被照亮了。    •如果它与另一个物体相交,则该物体在其上投下阴影。    •最后,如果我们对每个像素重复这一操作,就可以获得三维场景的二维表示。    2、伪代码  光线追踪算法实现

8、的伪代码如下所示:  for(intj=0;jidth;++i){  //computeprimaryraydirection  RayprimRay;  computePrimRay(i,j,&primRay);  //shootprimrayinthesceneandsearchforintersection  NormalnHit;  floatminDist=INFINITY;  Objectobject=NULL;  for(in

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。