图形学笔记:光线追踪
2017-01-14 17:13
225 查看
光线追踪是一种经典的渲染方法。
L=kaIa+kdImax(0,n∗l)+ksImax(0,n∗h)n
因此在每个顶点处需要记录纹理颜色k和法线方向n。
概述
光线追踪算法假设光线从眼睛出发,追踪光线的路径,由此找到对应像素的信息。光线生成
投影
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 #没有和物体相交返回背景光
相关文章推荐
- 扫描转换直线段--DDA算法
- 绘制六面体
- 海水截面模拟
- 计算机图形学国际知名会议与期刊
- easyx学习总结
- Easyx 学习总结
- Moving Portraits
- 初涉openGL遇显卡问题【解决方案】
- 【OpenGL】创建窗口笔记拾遗
- 【OpenGL】GLFW配置
- 计算机图形学入门学习——阴影
- [OpenGL] OpenGL+VS2015环境配置
- 在codeblock里创建一个OpenGL项目
- 如何用C语言画一个高逼格的"心形"?
- 计算机图形学——OpenGL开发库开发库
- 初接触计算机图形学看到的一些有趣的英文
- 中点画圆法(计算机图形学)
- 计算机图形学方向投稿国外期刊
- 使用PCL的IntegralImageNormalEstimation遇到的vector subsript out of range问题
- 【Computer Graphics】2.直线生成算法(中点画线 算法)