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

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

  

posted on 2020-03-31 03:57  dalgleish  阅读(256)  评论(0编辑  收藏  举报