这个类主要是用于记录碰撞数据的类,书中已经说的很清楚了。这个类之后会慢慢扩展,会在本随笔中扩展,先定义简单的,方便编译看看效果。
类声明(World是之后主程序中的类,最后测试时再实现):
#ifndef __SHADEREC_HEADER__ #define __SHADEREC_HEADER__ #include "ray.h" class World; class ShadeRec { public: ShadeRec(World& wr); ~ShadeRec(); ShadeRec(const ShadeRec& sr); bool hit_an_object; Point3 local_hit_point; Normal3 normal; Ray ray; RGBColor color; World& w; }; #endif
目前先记录是否碰撞,碰撞点,法线,光线以及碰撞后的颜色。
类实现:
#include "pch.h" #include "shaderec.h" #include "world.h" //这个文件头最后实现 ShadeRec::ShadeRec(World& wr) :hit_an_object(false), local_hit_point(), normal(), ray(), color(), w(wr) {} ShadeRec::~ShadeRec() {} ShadeRec::ShadeRec(const ShadeRec& sr) : hit_an_object(sr.hit_an_object), local_hit_point(sr.local_hit_point), normal(sr.normal), ray(sr.ray), color(sr.color), w(sr.w) {}
-------------------------------------------------------------------------------------------------