zoukankan      html  css  js  c++  java
  • 4 光线/盒 相交

      光线追踪中一个常用形式就是长方形的盒子。这个图元对象经常被用于边界体积-一个用于加快复杂对象相交测试的算法。

      Kay和Kajiya提出了一个基于slabs[9]来处理这些相交对象的方法。slab就是两个平行平面之间的空间。slab集的相交定义了边界体积。该方法依赖于每一对板的光线的交点,跟踪近距离和远距离的交点距离。如果最大的近值大于最小的远值,那么射线会错过边界体积。否则,会击中。

      最简单的有限边界体积之一是两个平行平面的交点,每个平面对齐,使得它们的法线与X,Y和Z轴的方向相同。 这个配置有很多属性,这使得它可以有效地测试交集。 以下算法使用这些属性来允许快速测试边界盒。 它被写入以便返回一个布尔值:如果该盒已经被命中则为TRUE,否则返回FALSE。

      用两个坐标定义正交盒:

        

      根据其原点和方向矢量定义光线:

        

      其中t > 0。 我们并不要求这些计算的射线方向被标准化,尽管如果需要相交距离,这种标准化是可取的。

        算法如下,如果击中盒,返回TRUE:

        依次判断X,Y,Z坐标,这里写的是X坐标的情况

        

        

      如果盒子被击中,相交距离等于tnear,射线的出口点是tfar。 可以按照公式(C8)中'射线/平面相交'部分公式计算交点。 图11显示了相交测试的两种情况。 对于更高效的算法,展开循环,将t1和t2交换为两个分支,然后将计算更改为乘以光线方向的倒数以避免分割。 展开回路允许消除比较t1和t2与X平面的tnear和tfar,因为tnear将始终设置为较小值,tfar则为t1和t1中较大的值。

         

  • 相关阅读:
    [LeetCode] Same Tree, Solution
    图搜索
    1 sec on Large Judge (java): https://github.com/l...
    [LeetCode] Path Sum, Solution
    嗯哪
    海量数据处理总结
    [LeetCode] Unique Binary Search Trees II, Solution
    [Interview] Serialize and Deserialize a tree
    设计题
    [LeetCode] Convert Sorted Array to Binary Search Tree, Solution
  • 原文地址:https://www.cnblogs.com/TooYoungTsukasa/p/9252581.html
Copyright © 2011-2022 走看看