您的位置:首页 > 理论基础

图形学笔记:光线追踪

2017-01-14 17:13 225 查看
光线追踪是一种经典的渲染方法。



概述

光线追踪算法假设光线从眼睛出发,追踪光线的路径,由此找到对应像素的信息。



光线生成

投影

3D场景到2D图像的转变有不同的投影方式,主要有平行投影和透视投影。其中透视投影和人眼的视觉特点一致。



光线

在透视投影中,光线的原点是人眼位置,方向为从眼睛到每个像素的方向。



交点

从眼睛发出的光线需要计算和场景中物体的交点。主要有线与球的交点,线和三角形的交点。其中线和三角形的交点比较常用。这一步的做法是联立方程组,求解交点坐标。

着色

在着色这一步主要考虑有光,阴影和镜面反射。

光由三部分组成:环境光,漫反射光和镜面反射光。

L=kaIa+kdImax(0,n∗l)+ksImax(0,n∗h)n

因此在每个顶点处需要记录纹理颜色k和法线方向n。

阴影

从交点处和光源连线,如果中间有遮挡,那么这里就是阴影。

镜面反射

镜面反射的解决方法是递归调用,反复寻找上一个交点。

伪代码

function raycolor( ray e + td, real t0, real t1 ) #求某个像素着色
hit-record rec, srec
if (scene→hit(e + td, t0, t1, rec)) then   #视线与物体相交
p = e + (rec.t) d
color c = rec.ka Ia  #环境光
if (not scene→hit(p + sl,epsilon, ∞, srec)) then  #不是阴影
vector3 h = normalized(normalized(l) + normalized(−d))
c = c + rec.kd I max (0, rec.n · l) + (rec.ks) I (rec.n · h)rec.p
return c   #出现阴影就返回环境光
else
return background-color #没有和物体相交返回背景光
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  计算机图形学