float minReflectlvity. minTransparency; // boo! isInShadow(Ray& f):
// for ray tracing: implementation left to the reader // для трассировки лучей: реализация оставлена читателю Scene():light(NULL).obj(NULL).tail(NULL)
ВЗ. Класс SCENE и сопутствующие классы
// default constructor // конструктор по умолчанию {
currMtrl .setDefaultO: background.set(0.О.О.6f): ambient.setCO.If.0.If.0.If); minReflectivity - 0.5; minTransparency - 0.5: maxRecursionDepth - 3:
}
SceneCstring fname){Scene(): read(fname);} void freeSceneO:
void makeLightsOpenGL(){/* to be implemented */} // подлежит реализации
void drawSceneOpenGLO;
bool read(string fname):
GeomObj* getObjectO: private:
// private stuff used only for reading a scene
// private материал, используется только для чтения сцены
int line:
int nextline:
if stream *file_in;
strstream *f_in;
strstream temp_fin;
DefUni tStack *def_stack:
GeomObj * tail: // tail of object list // остаток списка объектов
AffineStack affStk; // affine stack // аффинный стек
Material currMtrl:
string nexttoken(void):
float getFloatO:
bool isidentifier(string keyword): void cleanUpO:
mTokenType whichtoken(string keyword);
}:
// end of Scene.h
// конец файла Scene.h
#endif //SDL.cpp
// support code for the classes in SDL.h
// вспомогательный код для классов в файле SDL.h
#include "SDL.h"
// Vector3 methods
// методы Vector3
Vector3 Vector3 :: cross(Vector3 b) //return this cross b
//возвращаем зто векторное произведение на b {
Приложение В. Некоторые полезные классы и служебные подпрограммы
Vector3 c(y*b.z - z*b.y. z*b.x - x*b.z. x*b.y - y*b.x); return c:
}
float Vector3 ;: dot(Vector3 b)
// return this dotted with b
// возвращаем это скалярное произведение с b
{return х * b.x + у * b.y + z * b.z:}
void Vector3 :: normalize()
// adjust this vector to unit length
// приводим данный вектор к единичной длине
{
double sizeSq - x*x + y*y + z*z:
if(s1zeSq < 0.0000001)
{
cerr « "\nnonralizeO sees vector (0.0.0)!": return:
// does nothing to zero vectors:
// для нулевых векторов не делается ничего