#define TexturePCXFile "color.pcx"       //Имя файла с текстурой

#define MaxTextures 32         //Количество используемых текстур
#define MaxObjects 256         //Количество используемых объектов
#define MaxModels  128         //Количество используемых моделей
#define MaxObjectsVerts  32768 //Количество используемых моделей

#define StatusMatrixMemSize     16*4     //Размер матрицы статуса
#define VertexMemSize            4*4     //Размер одной вершины
#define TVertexMemSize           2*4     //Размер одной текстурной вершины
#define FaceMemSize              4*4     //Размер одной грани
#define ObjectsSxSyMemSize       2*4     //sx,sy (спроецированные координаты)
#define ObjectsXYZMemSize        4*4     //x,y,z,res (res - для выравнивания)

//Полный размер памяти, используемой статусными матрицами всех объектов
#define FullStatusMatrixMemSize   StatusMatrixMemSize*MaxObjects
//Полный размер памяти, используемой под спроецированные вершины объектов
#define FullObjectsSxSyMemSize   MaxObjectsVerts*ObjectsSxSyMemSize
//Полный размер памяти, используемой под преобразованные координаты (x,y,z)
#define FullObjectsXYZMemSize   MaxObjectsVerts*ObjectsXYZMemSize

dword VideoBuf=0;                       //Смещение к видеобуферу
dword SortBuf=64000;                    //Смещение к буферу сортировки
dword TextureBuf=326144;                //Смещение к текстурному буферу
dword StatusMatrixBuf=65536*MaxTextures+326144; //Смещение к статусному буферу


//Смещение начала динамической памяти объектов (для sx,sy)
#define OffsObjectsMem 65536*MaxTextures+326144+FullStatusMatrixMemSize

//Смещение начала динамической памяти моделей
#define OffsModelsMem OffsObjectsMem+FullObjectsSxSyMemSize+FullObjectsXYZMemSize

//Указатель положения начала свободной памяти объектов (sx,sy)
dword ObjectsSxSyMemPointer=OffsObjectsMem;
//Указатель положения начала свободной памяти объектов (x,y,z,res)
dword ObjectsXYZMemPointer=OffsObjectsMem+FullObjectsSxSyMemSize;
//Указатель на начало свободной памяти моделей
dword ModelsMemPointer=OffsModelsMem;

struct _Object_
{
 dword Number;             //Номер объекта
 dword OffsStatusMatrix;   //Смещение начала матрицы статуса объекта
 dword OffsSxSy;           //Смещение начала спроецированных координат вершин
 dword OffsXYZ;       //Смещение начала объектных координат вершин (x,y,z,res)
 float x,y,z;              //Положение в пространстве
 float rx,ry,rz;           //Поворот вокруг x,y,z
 dword ModelNum;           //Номер модели
}Object[MaxObjects];

struct _Model_
{
 dword OffsVerts;      //Смещение начала точек
 dword OffsFaces;      //Смещение начала полигонов
 dword OffsTVerts;     //Смещение начала координат вершин в текстуре
 dword NumVerts;       //Количество точек
 dword NumFaces;       //Количество полигонов
 dword NumTVerts;      //Количество вершин (для текстур)
}Model[MaxModels];     //Model[ModelNum]

dword MemOffs;         //Смещение к началу выделенной памяти
dword MemHandle;

dword TextureWidth;   //Ширина текстуры
dword TextureHeight;  //Высота текстуры

float dist=2000;
float HalfSizeX=160;
float HalfSizeY=100;

word FileHandle;

long tmp,tmp1;         //Временная лонговская переменная
float ftmp;       //Временная фолатовская переменная
dword modelnum;   //Временная переменная (номер модели)

long NumberVisibleFaces=0; //Количество видимых граней
long NumObjects=0;         //Количество объектов
dword NumModels=0;         //Количество моделей

dword TextureSel;      //Селектор текстуры (для текстурирования)

//Временная матрица
float Matrix[16];
//Матрица камеры
float CameraMatrix[4*4];
//Матрица поворота камеры
float CameraRotateMatrix[4*4];

float VectorBA[3];     //Временный вектор BA
float VectorCA[3];     //Временный вектор CA
float n[3];            //Нормаль (nx,ny,nz)

struct _XYZ_
{
 float x,y,z;
};

struct _Camera_
{
 float rx; //Вверх
 float ry; //Вверх
 float rz; //Вверх
 float px; //Вперед
 float py; //Вперед
 float pz; //Вперед
 float qx; //Вправо
 float qy; //Вправо
 float qz; //Вправо
 float sx; //Центр проецирования
 float sy; //Центр проецирования
 float sz; //Центр проецирования
 float RotateOX; // Поворот вокруг OX
 float RotateOY; // Поворот вокруг OY
 float RotateOZ; // Поворот вокруг OZ
 float rx1,ry1,rz1,px1,py1,pz1,qx1,qy1,qz1,sx1,sy1,sz1;
}Camera;

