文章内容是对《3D计算机图形学》(第三版)一书的学习记录。
光线和计算机图形学
大多数情况下,将光描述为一种无限细的光束-一束光线。一条光线可以由两点或者是一个点加一个向量来定义。
光线几何
与光线相关最常见的计算就是相交测试,也就是观察一条光线是否与一个物体相交,并确定相交的位置。最通用的技术就是将场景中的物体限制在一个限定体之内,这个限定体一般是球。
首先先测试光线和球的相交,球包围着物体,如果光线和球不相交,那么它也不会和物体相交。
相交———光线与球
光线和球之间的相交计算如下:
如果光线的两端分别是(x1,y1,z1)和(x2,y2,z3),则第一步是光线参数化:
其中,0<t<1。
中心在(l,m,n)半径为r的球由下式给出:
将上面的x,y,z带入可得
其中:
那个便可以用二次方程的判定条件来判定该方程是否有解,也就是光线和球是否有相交点。如果b2-4ac<0则不相交。如果说等于0,光线和球相切,如果大于零会有两个相交点。
同时,相交也可以获得表面的法向量,同时也可以计算得到反射光线和折射光线。
相交——光线和凸多边形
这里只介绍简单步骤,与球相交的思想是相似的。
如果说物体是由一组多边形表示,并且是凸多边形,直接的方法是逐个对每个多边形与光线的关系进行测试。
- 得到一个包含多边形的平面方程;
- 检查该平面和光线的相交;
- 检查相交是否包含在多边形中。
相交——光线和包围盒
包围盒可以是一组相互平行的平面对构成的,平面对之间的夹角可以是任意的,这里只考虑矩形的包围框。
测试一条光线是否和包围盒相交:
依次测试每一对平行平面,计算沿着光线到第一对平面的距离和到第二对平面的距离,比较过程中保留到第一对平面的距离中的较大值,以及到第二对平面距离的较小值。如果到第一对平面的较大值要比到第二对平面的较小值大,那么光线不能和包围盒相交。如下图:
注意:这里是指两对平面之间的关系,而不是一对平面的两个平面。
反射和折射
反射
每当一条光线和一个表面相交时,均会产生一个折射和反射。
反射方向可以由一个单位向量表示:
L,N代表入射光线方向的单位向量。
折射
光纤通过一个部分或者完全透明的光线时由于光在不同介质中的速度变化而产生折射,折射角和入射角之间存在一定的关系。
公式如下: