chapter 6:抗锯齿
文章翻译
当真实的照相机拍一张照片时,在物体边缘通常是没有锯齿的,因为边缘像素混合了一些前景色和背景色。我们可以通过对每个像素的许多样本的颜色取平均值来达到这个效果。我们不用担心分层,尽管这有争议,但是在我的项目里很常见。这对一些光线追踪来说是关键的,尽管我们写下通用的那种也不会收益很多,况且会让我们的代码看起来丑陋。我们把相机类抽象出来,因此我们过后能够制作一个炫酷的相机。
我们需要一个随机数生成器,这能够返回真实的随机数值。c++没有传统上的标准随机数生成器,但是很多系统有 drand48 函数,这也是我在项目中使用的。然而,新版本的c++已经配置头文件来解决了这个问题(如果根据一些专家的说法,这并不完美).无论你的基础配置如何,请找到一款能够返回权威随机值的函数,能传统的返回在0~1区间的真实值,值小于1是很关键的,因为在某些时候我们会利用到这一点。
对于一个给定的像素,我们在这个像素内有很多样本,并对每个样本发射光线,最终颜色就是这些光线所看到颜色的平均值:
把那些相关参数放一起,就产生了一个相机类,这封装了我们简单轴对齐相机:
主函数也改变了:
放大所生成的图像,最大的改变是物体边缘的像素,有一部分是前景色,一部分是背景色: