针对于单个球体的碰撞,其实和多个球体一样的,只是我修改了书上的代码,定义了这么多类,终于到头了。马上就要展示奇迹的时候了。

类定义:

#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();
}

 

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