针对于单个球体的碰撞,其实和多个球体一样的,只是我修改了书上的代码,定义了这么多类,终于到头了。马上就要展示奇迹的时候了。
类定义:
#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(); }