练习(Exercises

① 1.找到一种更有效的方法来转换轴对齐的包围盒,利用问题的对称性(symmetries):因为八个角点是三个轴对齐基向量和一个单一角点的线性组合,它们的变换边界框可以比我们所提出的方法(Arvo 1990)更高效地求出。

② 2.可以通过使用许多非正交平面(nonorthogonal slabs)的交集来计算物体周围的更紧密边界,而不是使用框。扩展 pbrt 中的边界框表示,以允许用户指定由任意平面组成的边界。

② 3.DirectionCone::BoundSubtendedDirections() 方法通过首先找到一个包围 Bounds3f 的球体,然后限制其从给定参考点所形成的方向,来界定一个 Bounds3f 的方向。虽然这提供了一个有效的界限,但不一定是可能的最小界限。推导出一个改进的算法,直接作用于包围盒,更新 BoundSubtendedDirections() 的实现,并渲染使用该方法的场景(例如,使用 BVHLightSampler 来采样光源的场景)。运行时间和图像质量会受到怎样的影响?你能找到一个这种变化带来显著好处的场景吗?

① 4.修改 pbrt 使其像 Vector3f 一样变换 Normal3f ,并创建一个由于此错误而产生明显不正确图像的场景。(完成后不要忘记从您的源代码副本中还原此更改!)