Primitive 类
class Primitive : public ReferenceCounted {
public:
// Primitive Interface
Primitive() : primitiveId(nextprimitiveId++) { }
virtual ~Primitive();
virtual BBox WorldBound() const = 0;
virtual bool CanIntersect() const;
virtual bool Intersect(const Ray &r, Intersection *in) const = 0;
virtual bool IntersectP(const Ray &r) const = 0;
virtual void Refine(vector<Reference<Primitive> > &refined) const;
void FullyRefine(vector<Reference<Primitive> > &refined) const;
virtual const AreaLight *GetAreaLight() const = 0;
virtual BSDF *GetBSDF(const DifferentialGeometry &dg,
const Transform &ObjectToWorld, MemoryArena &arena) const = 0;
virtual BSSRDF *GetBSSRDF(const DifferentialGeometry &dg,
const Transform &ObjectToWorld, MemoryArena &arena) const = 0;
// Primitive Public Data
const uint32_t primitiveId;
protected:
// Primitive Protected Data
static uint32_t nextprimitiveId;
};
类的作用:
(Shape不能表示Scene上的一个物体,因为Shape只有几何的信息,一个物体往往需要的还有是外观的信息(材质,所以 出现了Primitive ,既 包含了几何信息,又包含了材质信息))
Although the Shape class provides a convenient abstraction for
geometric operations such as intersection and bounding, it doesn’t contain enough information
to fully describe an object in a s