首先我的结构图是这样的,当然你自己喜欢怎么改都行。这个不影响,只要包含到正确的头文件就行。

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;
}