简单的光线追踪教程(二)
4. 光线,简单的照相机和背景
4.1. 射线类
所有的光线追踪器都会有射线类,以及沿着射线看到什么颜色的计算。让我们把射线看作是一个函数
P ( t ) = A + t b P(t) = A + tb P(t)=A+tb
这里P是三维线上的三维位置。A是射线的起源bb是光线的方向。射线参数t是一个实数(在代码中用double修饰),通过不同的变量变换,我们可以得到射线或直线。
我们可以写一个类来表示射线类
#ifndef RAY_H
#define RAY_H
#include "vec3.h"
class ray {
public:
ray() {}
ray(const point3& origin, const vec3& direction)
: orig(origin), dir(direction)
{}
point3 origin() const { return orig; }
vec3 direction() const { return dir; }
point3 at(double t) const {
return orig + t*dir;
}
public:
point3 orig;
vec3 dir;
};
#endif
4.2. 准备一个射线追踪器
我们射线追踪器的核心部分通过像素发送光线,并且计算在这些射线计算这些射线方向上所看到的颜色。所涉及的步骤是:(1)计算光线从眼睛到像素,(2)确定