屏幕上的一个像素,是通过各种反射、折射而共同组成的,每个反射折射的点,都会考虑光源是否有直接照射到反射折射的点上,反射与折射之间会存在能量衰减,最终汇总在屏幕的像素上。
计算是哪一个三角形被射线打中,则在三角形上扩展成一个与三角形位置平行且完全包含三角形的平面,N为平面的法线,pPre是在平面上的任意一点,若射线OD打到平面上的交点与pPre组成向量与N相乘为0(由于垂直,向量相乘为0),则表明射线OD打中平面,再判断是否打中三角形,世界中每一个在玩家视口中的三角形都会这样判断。
为了加快运算效率,提出了Bounding Volume的概念,将一个规则的集合体包裹在物体上,若射线没有打到包围盒上,那么肯定也没有打到物体上的三角面,当只移动玩家视角的时候,这整个物体的三角面就不用得到重新计算。
KD-Tree就是先绕X轴分一个横线,然后在Y轴分一个竖线,以此往复,如果是3维,就是X,Y,Z轴依次用平面来切割,以此往复
蓝色块与射线有入射线和出射线,进行判断蓝色快内是否有物体与射线有交点。
到下一个节点去,射线在B的范围内同时也有入射线和出射线,所以判断B中是否有交点,B中分为2和C部分,先看2中是否存在射线与物体的交点
找C块,C块又分为D部分和3,先看3,3与射线有入射点和出射点,所以判断3中是否存在物体与射线的交点,很明显是存在的
接着判断4和5,5没有入射点和出射点,所以5这一块不用做交点判断
为了防止和KD-Tree一样,一个object有多个树节点存储它的信息,所以有了Bounding Volume Hierarchy算法,只有完全框到的才能算在树节点内
每次取最长的一个框的一条轴取划分这是一个BVH算法的其中一个划分方法
每次取一个框的中位线也是BVH的一种划分方法