first commit
This commit is contained in:
120
include/engine/core/geometry_reducer.h
Normal file
120
include/engine/core/geometry_reducer.h
Normal file
@ -0,0 +1,120 @@
|
||||
/* -----------------------------------------------------------------------------
|
||||
GSFramework
|
||||
Copyright 2001-2013 Emmanuel Julien. All Rights Reserved.
|
||||
----------------------------------------------------------------------------- */
|
||||
|
||||
|
||||
#ifndef __NGEOREDUCER__
|
||||
#define __NGEOREDUCER__
|
||||
|
||||
|
||||
#include "math/vector.h"
|
||||
|
||||
|
||||
namespace GS {
|
||||
namespace Core {
|
||||
class Geometry;
|
||||
|
||||
struct nLLEDGE
|
||||
{
|
||||
uint a, b;
|
||||
nLLEDGE *p, *n;
|
||||
};
|
||||
|
||||
struct nEENTRY
|
||||
{
|
||||
nLLEDGE *edge;
|
||||
nEENTRY *n;
|
||||
};
|
||||
|
||||
typedef nEENTRY * pnEENTRY;
|
||||
|
||||
class nEDGELIST
|
||||
{
|
||||
public:
|
||||
|
||||
pnEENTRY *lut;
|
||||
nLLEDGE *root;
|
||||
uint vtx_count, nedg;
|
||||
|
||||
void SetVertexCount(uint);
|
||||
void Add(uint, uint);
|
||||
void Remove(nLLEDGE *);
|
||||
void RemapEdges(uint, uint);
|
||||
nLLEDGE *GetEdge(uint, uint);
|
||||
|
||||
nEDGELIST ();
|
||||
~nEDGELIST ();
|
||||
};
|
||||
|
||||
class nLLTRI
|
||||
{
|
||||
public:
|
||||
|
||||
uint a, b, c;
|
||||
ushort m;
|
||||
Vector4 normal;
|
||||
nLLTRI *p, *n;
|
||||
|
||||
char UseVertex(uint);
|
||||
void ReplaceVertex(uint, uint);
|
||||
};
|
||||
|
||||
struct nTENTRY
|
||||
{
|
||||
nLLTRI *tri;
|
||||
nTENTRY *n;
|
||||
};
|
||||
|
||||
typedef nTENTRY * pnTENTRY;
|
||||
|
||||
class nLTRILIST
|
||||
{
|
||||
public:
|
||||
|
||||
pnTENTRY *lut;
|
||||
nLLTRI *root;
|
||||
Geometry *sg;
|
||||
|
||||
void SetGeo(Geometry *);
|
||||
nLLTRI *Add(uint, uint, uint);
|
||||
void ReplaceVertex(uint, uint);
|
||||
void AddTriToVertex(nLLTRI *, uint);
|
||||
void RemoveTriFromVertex(nLLTRI *t, uint v);
|
||||
void Remove(nLLTRI *);
|
||||
void ComputeNormal(nLLTRI *);
|
||||
|
||||
uint ntri;
|
||||
|
||||
nLTRILIST ();
|
||||
~nLTRILIST ();
|
||||
};
|
||||
|
||||
struct nLVERTEX
|
||||
{
|
||||
char active, locked;
|
||||
float cost;
|
||||
uint tgtcollapse;
|
||||
};
|
||||
|
||||
class GeometryReducer
|
||||
{
|
||||
public:
|
||||
|
||||
nEDGELIST elist;
|
||||
nLTRILIST tlist;
|
||||
nLVERTEX *vlist;
|
||||
|
||||
nLVERTEX *AddVertex(uint v);
|
||||
void RemoveVertex(uint v);
|
||||
void ComputeVertexCost(Geometry *, uint);
|
||||
float ComputeEdgeCost(Geometry *, nLLEDGE *);
|
||||
Geometry *Reduce(Geometry *, float k);
|
||||
char IsBorder(uint v);
|
||||
};
|
||||
|
||||
} // Core
|
||||
} // GS
|
||||
|
||||
|
||||
#endif // __NGEOREDUCER__
|
||||
Reference in New Issue
Block a user