mirror of
https://github.com/copyrighttxt/watrbx-game-engine.git
synced 2026-09-06 21:57:47 +00:00
GEEKING
This commit is contained in:
@@ -0,0 +1,376 @@
|
||||
#ifndef __sg3D__
|
||||
#define __sg3D__
|
||||
|
||||
/************************************************************************/
|
||||
/* 3DObject */
|
||||
/************************************************************************/
|
||||
typedef struct
|
||||
{
|
||||
unsigned short begin_vertex_index;
|
||||
unsigned short end_vertex_index;
|
||||
unsigned short edge_type;
|
||||
} SG_EDGE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
long ver_indexes[3];
|
||||
} SG_INDEX_TRIANGLE;
|
||||
|
||||
/* edge_type:*/
|
||||
#define SG_EDGE_1_LEVEL 0x0001
|
||||
#define SG_EDGE_2_LEVEL 0x0002
|
||||
#define SG_EDGE_3_LEVEL 0x0004
|
||||
|
||||
typedef enum
|
||||
{
|
||||
SG_UNKNOWN_3D=0,
|
||||
SG_BODY,
|
||||
SG_SURFACE,
|
||||
} SG_3DOBJECT_TYPE;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
SG_VERTEX_TRIANGULATION,
|
||||
SG_DELAUNAY_TRIANGULATION
|
||||
} SG_TRIANGULATION_TYPE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int nTr;
|
||||
SG_POINT* allVertex;
|
||||
SG_VECTOR* allNormals;
|
||||
SG_POINT* allColors;
|
||||
sgFloat* allUV;
|
||||
} SG_ALL_TRIANGLES;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
SG_MODULATE_MIX_TYPE=1,
|
||||
SG_BLEND_MIX_TYPE =2,
|
||||
SG_REPLACE_MIX_TYPE =3
|
||||
} SG_MIX_COLOR_TYPE;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
SG_CUBE_UV_TYPE =1,
|
||||
SG_SPHERIC_UV_TYPE =2,
|
||||
SG_CYLINDER_UV_TYPE =3
|
||||
} SG_UV_TYPE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int MaterialIndex;
|
||||
sgFloat TextureScaleU;
|
||||
sgFloat TextureScaleV;
|
||||
sgFloat TextureShiftU;
|
||||
sgFloat TextureShiftV;
|
||||
sgFloat TextureAngle;
|
||||
bool TextureSmooth;
|
||||
bool TextureMult;
|
||||
SG_MIX_COLOR_TYPE MixColorType;
|
||||
SG_UV_TYPE TextureUVType;
|
||||
} SG_MATERIAL;
|
||||
|
||||
class sgC3DObject;
|
||||
class sgCBRep;
|
||||
|
||||
/************************************************************************/
|
||||
/* Boundary representation piece */
|
||||
/************************************************************************/
|
||||
class sgCore_API sgCBRepPiece
|
||||
{
|
||||
friend class sgCBRep;
|
||||
PRIVATE_ACCESS
|
||||
private:
|
||||
void* m_brep_piece_handle;
|
||||
|
||||
SG_POINT* m_vertexes;
|
||||
unsigned int m_vertexes_count;
|
||||
|
||||
SG_EDGE* m_edges;
|
||||
unsigned int m_edges_count;
|
||||
|
||||
SG_POINT m_min;
|
||||
SG_POINT m_max;
|
||||
|
||||
int m_min_triangle_number;
|
||||
int m_max_triangle_number;
|
||||
|
||||
sgCBRepPiece();
|
||||
~sgCBRepPiece();
|
||||
public:
|
||||
void GetLocalGabarits(SG_POINT& p_min, SG_POINT& p_max) const;
|
||||
|
||||
const SG_POINT* GetVertexes() const;
|
||||
unsigned int GetVertexesCount() const;
|
||||
|
||||
const SG_EDGE* GetEdges() const;
|
||||
unsigned int GetEdgesCount() const;
|
||||
|
||||
void GetTrianglesRange(int& min_numb, int& max_numb) const;
|
||||
};
|
||||
|
||||
/************************************************************************/
|
||||
/* Boundary representation */
|
||||
/************************************************************************/
|
||||
class sgCore_API sgCBRep
|
||||
{
|
||||
friend class sgC3DObject;
|
||||
PRIVATE_ACCESS
|
||||
private:
|
||||
sgCBRep();
|
||||
~sgCBRep();
|
||||
|
||||
sgCBRepPiece** m_pieces;
|
||||
unsigned int m_pieces_count;
|
||||
public:
|
||||
sgCBRepPiece* GetPiece(unsigned int) const;
|
||||
unsigned int GetPiecesCount() const;
|
||||
};
|
||||
|
||||
/************************************************************************/
|
||||
/* 3D object base class */
|
||||
/************************************************************************/
|
||||
class sgCore_API sgC3DObject : public sgCObject
|
||||
{
|
||||
protected:
|
||||
sgC3DObject();
|
||||
sgC3DObject(SG_OBJ_HANDLE);
|
||||
|
||||
virtual ~sgC3DObject();
|
||||
|
||||
public:
|
||||
static void AutoTriangulate(bool,SG_TRIANGULATION_TYPE);
|
||||
|
||||
bool Triangulate(SG_TRIANGULATION_TYPE);
|
||||
|
||||
SG_3DOBJECT_TYPE Get3DObjectType() const;
|
||||
|
||||
sgCBRep* GetBRep() const;
|
||||
const SG_ALL_TRIANGLES* GetTriangles() const;
|
||||
|
||||
virtual bool ApplyTempMatrix();
|
||||
const sgFloat* GetWorldMatrixData() const;
|
||||
|
||||
void SetMaterial(const SG_MATERIAL&);
|
||||
const SG_MATERIAL* GetMaterial();
|
||||
bool CalculateOptimalUV(sgFloat& optU, sgFloat& optV);
|
||||
|
||||
sgFloat GetVolume();
|
||||
sgFloat GetSquare();
|
||||
|
||||
void SetColor(const SG_POINT& color);
|
||||
void Scale(const SG_POINT& scale);
|
||||
void Translate(const SG_POINT& translation);
|
||||
void Transform(const sgCMatrix& matrix);
|
||||
|
||||
private:
|
||||
SG_3DOBJECT_TYPE m_objectType;
|
||||
sgCBRep* m_brep;
|
||||
bool CopyBRepStructure();
|
||||
SG_ALL_TRIANGLES* m_triangles;
|
||||
void CalcUV();
|
||||
sgCMatrix* m_world_matrix;
|
||||
SG_MATERIAL* m_material;
|
||||
|
||||
PRIVATE_ACCESS
|
||||
};
|
||||
|
||||
|
||||
|
||||
/************************************************************************/
|
||||
/* Box */
|
||||
/************************************************************************/
|
||||
|
||||
typedef struct
|
||||
{
|
||||
sgFloat SizeX;
|
||||
sgFloat SizeY;
|
||||
sgFloat SizeZ;
|
||||
} SG_BOX;
|
||||
|
||||
class sgCore_API sgCBox : public sgC3DObject
|
||||
{
|
||||
private:
|
||||
sgCBox();
|
||||
sgCBox(SG_OBJ_HANDLE);
|
||||
virtual ~sgCBox();
|
||||
|
||||
public:
|
||||
static sgCBox* Create(sgFloat sizeX, sgFloat sizeY, sgFloat sizeZ);
|
||||
void GetGeometry(SG_BOX& ) const;
|
||||
PRIVATE_ACCESS
|
||||
};
|
||||
#define sgCreateBox sgCBox::Create
|
||||
|
||||
|
||||
|
||||
/************************************************************************/
|
||||
/* Sphere */
|
||||
/************************************************************************/
|
||||
|
||||
typedef struct
|
||||
{
|
||||
sgFloat Radius;
|
||||
short MeridiansCount;
|
||||
short ParallelsCount;
|
||||
} SG_SPHERE;
|
||||
|
||||
class sgCore_API sgCSphere : public sgC3DObject
|
||||
{
|
||||
private:
|
||||
sgCSphere();
|
||||
sgCSphere(SG_OBJ_HANDLE);
|
||||
virtual ~sgCSphere();
|
||||
|
||||
public:
|
||||
static sgCSphere* Create(sgFloat rad, short merid, short parall);
|
||||
void GetGeometry(SG_SPHERE&) const;
|
||||
PRIVATE_ACCESS
|
||||
};
|
||||
#define sgCreateSphere sgCSphere::Create
|
||||
|
||||
|
||||
|
||||
/************************************************************************/
|
||||
/* Cylinder */
|
||||
/************************************************************************/
|
||||
|
||||
typedef struct
|
||||
{
|
||||
sgFloat Radius;
|
||||
sgFloat Height;
|
||||
short MeridiansCount;
|
||||
} SG_CYLINDER;
|
||||
|
||||
class sgCore_API sgCCylinder : public sgC3DObject
|
||||
{
|
||||
private:
|
||||
sgCCylinder();
|
||||
sgCCylinder(SG_OBJ_HANDLE);
|
||||
virtual ~sgCCylinder();
|
||||
|
||||
public:
|
||||
|
||||
static sgCCylinder* Create(sgFloat rad, sgFloat heig, short merid);
|
||||
void GetGeometry(SG_CYLINDER&) const;
|
||||
PRIVATE_ACCESS
|
||||
};
|
||||
#define sgCreateCylinder sgCCylinder::Create
|
||||
|
||||
|
||||
|
||||
|
||||
/************************************************************************/
|
||||
/* Cone */
|
||||
/************************************************************************/
|
||||
|
||||
typedef struct
|
||||
{
|
||||
sgFloat Radius1;
|
||||
sgFloat Radius2;
|
||||
sgFloat Height;
|
||||
short MeridiansCount;
|
||||
} SG_CONE;
|
||||
|
||||
class sgCore_API sgCCone : public sgC3DObject
|
||||
{
|
||||
private:
|
||||
sgCCone();
|
||||
sgCCone(SG_OBJ_HANDLE);
|
||||
virtual ~sgCCone();
|
||||
|
||||
public:
|
||||
static sgCCone* Create(sgFloat rad_1,sgFloat rad_2,sgFloat heig, short merid);
|
||||
void GetGeometry(SG_CONE&) const;
|
||||
PRIVATE_ACCESS
|
||||
};
|
||||
#define sgCreateCone sgCCone::Create
|
||||
|
||||
/************************************************************************/
|
||||
/* Torus */
|
||||
/************************************************************************/
|
||||
|
||||
typedef struct
|
||||
{
|
||||
sgFloat Radius1;
|
||||
sgFloat Radius2;
|
||||
short MeridiansCount1;
|
||||
short MeridiansCount2;
|
||||
} SG_TORUS;
|
||||
|
||||
class sgCore_API sgCTorus : public sgC3DObject
|
||||
{
|
||||
private:
|
||||
sgCTorus();
|
||||
sgCTorus(SG_OBJ_HANDLE);
|
||||
virtual ~sgCTorus();
|
||||
|
||||
public:
|
||||
|
||||
static sgCTorus* Create(sgFloat r1,sgFloat r2,short m1,short m2);
|
||||
void GetGeometry(SG_TORUS&) const;
|
||||
PRIVATE_ACCESS
|
||||
};
|
||||
#define sgCreateTorus sgCTorus::Create
|
||||
|
||||
/************************************************************************/
|
||||
/* Ellipsoid */
|
||||
/************************************************************************/
|
||||
|
||||
typedef struct
|
||||
{
|
||||
sgFloat Radius1;
|
||||
sgFloat Radius2;
|
||||
sgFloat Radius3;
|
||||
short MeridiansCount;
|
||||
short ParallelsCount;
|
||||
} SG_ELLIPSOID;
|
||||
|
||||
class sgCore_API sgCEllipsoid : public sgC3DObject
|
||||
{
|
||||
private:
|
||||
sgCEllipsoid();
|
||||
sgCEllipsoid(SG_OBJ_HANDLE);
|
||||
virtual ~sgCEllipsoid();
|
||||
|
||||
public:
|
||||
|
||||
static sgCEllipsoid* Create(sgFloat radius1, sgFloat radius2, sgFloat radius3,
|
||||
short merid_cnt, short parall_cnt);
|
||||
void GetGeometry(SG_ELLIPSOID&) const;
|
||||
PRIVATE_ACCESS
|
||||
};
|
||||
#define sgCreateEllipsoid sgCEllipsoid::Create
|
||||
|
||||
/************************************************************************/
|
||||
/* SphericBand */
|
||||
/************************************************************************/
|
||||
|
||||
typedef struct
|
||||
{
|
||||
sgFloat Radius;
|
||||
sgFloat BeginCoef;
|
||||
sgFloat EndCoef;
|
||||
short MeridiansCount;
|
||||
} SG_SPHERIC_BAND;
|
||||
|
||||
class sgCore_API sgCSphericBand : public sgC3DObject
|
||||
{
|
||||
private:
|
||||
sgCSphericBand();
|
||||
sgCSphericBand(SG_OBJ_HANDLE);
|
||||
virtual ~sgCSphericBand();
|
||||
|
||||
public:
|
||||
static sgCSphericBand* Create(sgFloat radius, sgFloat beg_koef,
|
||||
sgFloat end_koef,
|
||||
short merid_cnt);
|
||||
void GetGeometry(SG_SPHERIC_BAND&) const;
|
||||
|
||||
PRIVATE_ACCESS
|
||||
};
|
||||
#define sgCreateSphericBand sgCSphericBand::Create
|
||||
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user