RayDifferential 类
class RayDifferential : public Ray {
public:
// RayDifferential Public Methods
RayDifferential() { hasDifferentials = false; }
RayDifferential(const Point &org, const Vector &dir, float start,
float end = INFINITY, float t = 0.f, int d = 0)
: Ray(org, dir, start, end, t, d) {
hasDifferentials = false;
}
RayDifferential(const Point &org, const Vector &dir, const Ray &parent,
float start, float end = INFINITY)
: Ray(org, dir, start, end, parent.time, parent.depth + 1) {
hasDifferentials = false;
}
explicit RayDifferential(const Ray &ray) : Ray(ray) {
hasDifferentials = false;
}
bool HasNaNs() const {
return Ray::HasNaNs() ||
(hasDifferentials && (rxOrigin.HasNaNs() || ryOrigin.HasNaNs() ||
rxDirection.HasNaNs() || ryDirection.HasNaNs()));
}
void ScaleDifferentials(float s) {
rxOrigin = o + (rxOrigin - o) * s;
ryOrigin = o &