первый

This commit is contained in:
2024-11-01 12:23:13 +05:00
parent 801d9d33fa
commit 0688c46a7e
226 changed files with 162921 additions and 0 deletions

104
lib/object3d.h Normal file
View 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