我的ray tracer

最近,为了练手,也为了graphics的作业,亲手写了一个ray-tracer。

其实,ray tracing的理论还是很简单的,但是,图形学就是这样,看着简单,但是写不出来,门槛很高,非图像所及耶~

理论图如下:

 

理论还是很简单的,算法如下:

main ( ) //主函数

{

         for(需要计算颜色的每一像素pixel) {

                   确定通过视点V和像素pixel的光线R;

                   depth = 0; // 递归深度

                   ratio = 1.0; //当前光线的衰减系数,1.0表示无衰减

                   // color是经计算后返回的颜色值

                   RayTrace(R, ratio, depth, color); 

                   置当前像素pixel的颜色为color;

         }

} // 主函数main( )结束

 

RayTrace(R, ratio, depth, color) //说明:光线跟踪子函数

{

         if(ratio < THRESHOLD) {              //终止条件2

                   color为黑色;

                   return;

         }

         if(depth > MAXDEPTH) {             //终止条件3

                   color为黑色;

                   return;

         }

         // to be continued

 

光线R与场景中的所有物体求交。若存在交点,找出离R起始点最近的交点P

        

if(交点不存在) {                       //终止条件1

                   color为黑色;

                   return;

         }

         用局部光照明模型计算交点P处的颜色值,并将其存入local_color

 

         // to be continued

if(交点P所在的表面为光滑镜面) {

                   计算反射光线Rr;

                   //递归调用!

                   RayTrace(Rr, ks*ratio, depth+1, reflected_color);

         }

         if(交点P所在的表面为透明表面) {

                   计算透射光线Rt;

         //递归调用!

                   RayTrace(Rt, kt*ratio, depth+1,transmitted_color);

         }

         // to be continued

依照Whitted模型合成最终的颜色值,即:

         color = local_color + ks*reflected_color

                kt*transmitted_color

 

         return;

} // 光线跟踪子函数RayTrace( )结束

 

 

在写的时候,有几个类,

Classes

1. Class Vector3

2. Class Ray

3. Class Color

4. Class Geometry

5. Class Sphere

6. Class Screen

  camera and light source

7. Class Light

 

场景中只有R、G、B三个球,此外,只写了reflection,没有refraction和transmission,从效果可以看出,

 

 

效果还是对的,不过,以后还需继续努力,做了反射,以后的折射和透射,以及radiosity和photon mapping都不是问题,下面是努力的方向,

Ø Refraction and transmission
Ø Kd -tree and BVH and grid structure.
Ø GPU and CUDA
Ø Millions of triangles
Ø Render engine

 

转载于:https://www.cnblogs.com/tandychao/archive/2010/05/27/1745886.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值