计算机图形学的基本任务就是将在3D世界中的几何物体以某种特定的视角,在2D平面上以像素的形式渲染出来。

一般来说,渲染可以分为两种思路:

这类似两重循环的不同的循环顺序。

相比之下,image-order rendering会更加简单粗暴,也更加灵活,只不过需要更大的计算量,但是效果也往往比较好。

ray-tracing 就是 image-order rendering中的基本思想。

1 The Basic Ray-Tracing Algorithm

光线追踪考虑从像素射出的一条光线。一个物体能被这条光线看到的前提是这个物体表面与光线有交点。

对于简单的光线追踪,我们往往需要在意光线第一次hit的物体表面,因为后面的交点都会被遮挡。

通过交点的位置,法向量,观察光线的方向,光源的类型和位置等因素,我们就可以计算这个交点的颜色,从而计算像素的颜色。

https://raw.githubusercontent.com/KevinSONG729/PicGo/main/Fundamentals of Computer Graphics-5th/image-20221029221806992.png

所以一个基础的光线追踪器分为三个部分:

https://raw.githubusercontent.com/KevinSONG729/PicGo/main/Fundamentals of Computer Graphics-5th/image-20221029221902613.png

接下来会分别介绍这三个部分,而这就能构建出基本的光线追踪器。

2 Perspective

对于绘画和计算机图形学来说,一个标准的从3D世界投影到2D平面的方式是linear perspective.

3D Objects are projected onto an image plane in such a way that straight lines in the scene become straight lines in the image.