针对于单个球体的碰撞,其实和多个球体一样的,只是我修改了书上的代码,定义了这么多类,终于到头了。马上就要展示奇迹的时候了。
类定义:
#pragma once
#ifndef __SINGLESPHERE_HEADER__
#define __SINGLESPHERE_HEADER__
#include "tracer.h"
class SingleSphere : public Tracer {
public:
SingleSphere(World* wr_ptr);
virtual ~SingleSphere();
virtual RGBColor trace_ray(const Ray& ray) const;
private:
SingleSphere();
};
#endif
类实现:
#include "pch.h"
#include "singlesphere.h"
#include "../utilities/world.h"
SingleSphere::SingleSphere(World* wr_ptr) :Tracer(wr_ptr) {}
SingleSphere::~SingleSphere() {}
RGBColor SingleSphere::trace_ray(const Ray& ray) const {
ShadeRec sr(world_ptr->hit_bare_bones_objects(ray));
if (sr.hit_an_object && world_ptr->get_object_size() == 1) //这里限制了一个球体
return sr.color;
return RGBColor();
}