//------------------------------------------------------------------------------ #ifndef object3dH #define object3dH //------------------------------------------------------------------------------ //#include //#include //#include //#include //#include //#include "texture.h" #include "structs.h" //------------------------------------------------------------------------------ //Материал для фейсов class TTriMat { private: protected: public: char name[20]; char imgpath[20]; unsigned int textureid; RfColorRGBA ColorAmbientRGB; RfColorRGBA ColorDiffuseRGB; RfColorRGBA ColorSpecularRGB; float USCALE,VSCALE; TTriMat(); void Release(); }; //------------------------------------------------------------------------------ //для разбивки объекта по материалам struct RMatFaces { char *name; //название материала unsigned short count; //кол-во unsigned short *faces; //номера фейсов принадлежащие данному материалу }; //------------------------------------------------------------------------------ //3d модель из треугольников class TTriangles { private: protected: public: unsigned short countMF; RMatFaces *MatFaces; bool del; RfPointXYZ MinPointXYZ,MaxPointXYZ,PointXYZCenter; //координаты краёв параллелипипида (для отсечения в плоскости XY) TTriMat* TriMat; char name[20]; //название обьекта ASCII bool bInit,bSmooth; unsigned int vbov,vbon,vbot,vbof; //вершины,нормали,текстура,рёбра RfPointXYZ *Vertices; //массив точек RfPointXYZ *SmoothNormals; // Массив сглаживающих нормалей (для каждой точки) RfPointXY *TexVertices; //координаты текстуры для каждой точки RsFacesABC *faces; //3х угольник из граней unsigned int *SmoothG; //массив сглаживающих групп (их всего 32 по количеству бит в беззнаковом int) unsigned int CountVertex; //количество вершин (и координат текстуры и нормалей) unsigned int CountFaces; //количество граней //unsigned int countMapPoint; TTriangles();//конструктор virtual ~TTriangles(); void render(); void CalcSmoothNormals(); //просчитать сглаживающие нармали к поверхности void CalcMinMaxPoint(); void cutOnSmoothGroup(); //добавить(разрезать) точки по номеру сглаживающей группы //резка обьекта по материалу будет производиться родителем потому что создаються новые обьекты TTriangles void AddMaterial(char *name,unsigned short wnum,unsigned short *faces); //название материала,колво элементов, список фейсов с этим материалом }; //------------------------------------------------------------------------------ //набор 3d моделей из 3х угольников class TTrianglesList { private: protected: unsigned int count; TTriangles **List; unsigned int countMat; TTriMat **ListMat; public: RfPointXYZ MinPointXYZ,MaxPointXYZ,CenterPointXYZ; TTrianglesList();//конструктор virtual ~TTrianglesList(); TTriangles* Add(); void DelTri(TTriangles* tri); TTriMat* AddMat(); void render(); void CalcSmoothNormals(); void CalcMinMaxPoint(); void cutOnSmoothGroup(); void cutOnMaterials(); //разркзать обьект по материалу TTriMat *FindMatOnName(char *name); }; //------------------------------------------------------------------------------ #endif