光线跟踪算法描述—计算机图形学

光线跟踪算法原理:
步骤一: 从视点出发通过该像素中心向场景发出一条光线 R ,并求出 R 与场景中物体的全部交点;获得离视点最近交点 P ;并依据局部光照明模型计算 P 处颜色值 Ic ( 光线投射 )。
步骤二: P 处沿着 R 镜面反射方向和透射方向各衍生一条光线  (注:若点P所在表面非镜面或不透明体,则无需衍生出相应光线)
步骤三: 分别对衍生出的光线递归地执行前面步骤,计算来自镜面反射和透射方向上周围环境对点 P 光亮度的贡献 I s I t。
步骤四: 依据 Whitted 光照明模型即可计算出点 P 处的光亮度,并将计算出的光亮度赋给该像素。
最终,当所有屏幕像素都处理完毕时,即得到一幅真实感图形。

(光线跟踪树示意图)
光线跟踪递归过程终止条件
1.  光线与环境中任何物体均不相交,或交于纯漫射面
2.  被跟踪光线返回的光亮度值对像素颜色的贡献很小
3.   已递归到给定深度
光线跟踪算法的伪语言描述

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( )结束






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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值