首先我的结构图是这样的,当然你自己喜欢怎么改都行。这个不影响,只要包含到正确的头文件就行。
geometrics是几何类的基础,所有几何的碰撞都是从这个类继承下来的。书中也说的很清楚了,大家可以阅读对应章节。
类声明:
#pragma once #ifndef __GEOMETRICS_HEADER__ #define __GEOMETRICS_HEADER__ #include "../utilities/geometry.h" //这些文件位置,取决于你自己放的位置。此处需要根据你的实际位置修改。 #include "../utilities/shaderec.h" #include "../utilities/ray.h" class Geometrics { public: Geometrics(); virtual ~Geometrics(); Geometrics(const Geometrics& g); void set_color(const RGBColor& c); RGBColor get_color() const; virtual Geometrics* clone() const = 0; virtual bool hit(const Ray& r, ldouble& tmin, ShadeRec& sr) const = 0; protected: Geometrics& operator=(const Geometrics& g); RGBColor color; }; #endif
类实现:
#include "pch.h" #include "geometics.h" Geometrics::Geometrics() :color() {} Geometrics::~Geometrics() {} Geometrics::Geometrics(const Geometrics& g) : color(g.color) {} void Geometrics::set_color(const RGBColor& c) { color = c; } RGBColor Geometrics::get_color() const { return color; } Geometrics& Geometrics::operator=(const Geometrics& g) { if (this == &g) return *this; color = g.color; return *this; }