int row. col: // for screen extents // для экстентов экрана
int numlnside: // number of objects on list // число объектов на список
GeomObj* inside[10]: // array of object pointers // массив указателей на объекты
Ray(){start.set(0.0.0): dir.set(O.O.O); numlnside - 0:}
Ray(Point3 origin); // constructor: set start point of ray // конструктор: устанавливаем начальную точку луча
Ray(Point3& origin. Vector3& direction)
{ start.set(origin): dir.set(direction): numlnside - 0;}
void setStart(Point3& p){start.set(p);}
void setDir(float x. float y. float z)
{dir.x - x; dir.у - у: dir.z - z:}
void setRayDirection(Light *L): // for shadow feelers // для щупов теней
void setRayDirection(Vector3& dir); // for spawned rays // для порожденных лучей
int isInShadowO:
void makeGenericRay(GeomObj* p. Ray& gr);
}:
Hitlnfo $№№<№№№№&
class Hitlnfo {
// data for each hit with a surface
// данные для каждого соударения с поверхностью
public:
double hitTime; // the hit time // момент соударения
GeomObj* hitObject: // the object hit // объект соударения
int surface: // which surface is hit? // с какой поверхностью соударение?
int isEntering: // is ray entering the object? // входит ли луч в объект?
Point3 hitPoint: // hit point // точка соударения
Vector3 hitNormal: // normal at hit point // нормаль в точке соударения
HitlnfoO
{
1000
Приложение В. Некоторые полезные классы и служебные подпрограммы
hitObject - NULL: hitTime - -1000:
surface - 0: isEntering - 0: } void set(H1tInfo& h) j {
hitTime - h.hitTime: hitObject - h.hitObject:
surface - h.surface: isEntering - h.isEntering:
hi tPoi nt.set(h.hi tPoint): hi tNormal.set(h.hi tNormal):
}
//wowmmmm intersection mmmmmmm
class Intersection! // hold the hit list // содержит список соударений public:
♦define maxNumHits 8
int numHIts: // the number of hits // число соударений
Hitlnfo hit[maxNumHits]: // list of hits: // список соударений
Intersection){numHits - 0:} // default constructor // конструктор по умолчанию
void set(Intersections intr)
{
// copy intersection info