первый
This commit is contained in:
104
lib/object3d.h
Normal file
104
lib/object3d.h
Normal file
@ -0,0 +1,104 @@
|
||||
//------------------------------------------------------------------------------
|
||||
#ifndef object3dH
|
||||
#define object3dH
|
||||
//------------------------------------------------------------------------------
|
||||
//#include <Classes.hpp>
|
||||
//#include <Controls.hpp>
|
||||
//#include <StdCtrls.hpp>
|
||||
//#include <Forms.hpp>
|
||||
//#include <GL/glu.h>
|
||||
//#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
|
||||
|
||||
Reference in New Issue
Block a user