English
OpenGL game
Algoritmus triangulace vertexů.
Download engine sources (1748kB)
07.08.17
Triangulační algoritmus trianguluje pole vertexů a vytváří konvexní polyhedron
1) Trianguluj pole vertexů.
void K3dTriangulation::Triangulate ( const TVertexArray &_rvVertex )
2) Vytvoř polyhedron ze vstupního pole vertexů.
K3dPolyObj *K3dConvex::CreatePolyFromVertexArray(const TVertexArray &_rvVertex)
3) Vymaž duplicitní vertexy z pole vertexů.
void K3dVertexWork::DeleteDupVerts(TVertexArray &_rvVertex)
4) Vytvoř všechny možné plochy kombinací tří vertexů.
void K3dConvex::CreateConvexPlane(const K3dVector3Obj &_rkV0,const K3dVector3Obj &_rkV1,const K3dVector3Obj &_rkV2)
5) Porovnej plochu s plochami v poli ploch a jestliže v poli neexistuje, přidej tuto plochu do pole.
bool K3dPlaneWork::ComparePlane ( K3dPolyPlane *_pPlane,const TPolyPlaneArray &_rPlaneArray )
6) Jestliže je plocha konvexní, přidej plochu do pole ploch. Konvexní plocha je taková, která má vertexy na ploše, nebo na zadní straně plochy.
bool K3dConvex::CheckConvexPlane()
7) Vytvoř hrany polyhedronu z pole vertexů.
void K3dConvex::CreateEdgesFromVertexArray()
8) Vytvoř hrany z pole vertexů, které leží na ploše.
void K3dConvex::CreateOnPlaneEdges()
9) Testuj hranu. Jestliže všechny ostatní vertexy jsou na přední, nebo zadní straně plochy hrany, tak přidej hranu do pole hran. Plocha hrany prochází oběma body hrany a je kolmá na plochu polyhedronu.
void K3dConvex::CheckEdge(const K3dVector3Obj *_pV0,const K3dVector3Obj *_pV1)
10) Vymaž duplicitní hrany z pole hran.
void K3dLineWork::DeleteDupLines(TLineArray &_rvLine)
11) Porovnej pole vertexů se všemi hranami a jestliže je vertex totožný s jedním bodem hrany, tak přidej vertex do výsledného pole vertexů.
void K3dConvex::CreateResultVertexArray()
12) Trianguluj polyhedron.
void K3dTriangulation::TriangulatePoly ( K3dPolyObj *_pPoly )
13) Trianguluj plochy polyhedronu. Triangulační algoritmus je (0,1,2 -> 0,2,3 -> 0,3,4 -> etc.).
void K3dTriangulation::TriangulatePolyPlane ( K3dPolyPlane *_pPolyPlane )
14) Zarovnej vertexy podle úhlu.
void K3dTriangulation::SortVector3ArrayByAngle ( K3dPolyPlane *_pPolyPlane )
15) Vypočítej střed pole vertexů ležících na ploše.
void K3dVector3Work::CalcVectorArrayCentre(K3dVector3Obj &_rkVCentre, const TVector3Array &_rvVector)
16) Projdi všechny vertexy a vypočítej úhel mezi vertexem a středem pole vertexů.
float K3dVector3Work::AngleBetweenVectors ( const K3dVector3Obj &_rkV0,const K3dVector3Obj &_rkV1, const K3dVector3Obj &_rkCentre )
17) Odečti první vertex pole vertexů od středu pole vertexů. Odečti následující vertex pole vertexů od středu pole vertexů. Vypočítej úhel mezi výslednými vertexy.
float K3dVector3Work::AngleBetweenVectors ( const K3dVector3Obj &_rkV0,const K3dVector3Obj &_rkV1 )
18) Normalizuj vektory vertexů a vypočítej úhel mezi normálovými vektory.
float K3dVector3Work::AngleBetweenNormals ( const K3dVector3Obj &_rkNormal0,const K3dVector3Obj &_rkNormal1 )
19) Projdi všechny zarovnané vertexy plochy a vytvoř trojúhelník.
void K3dTriangulation::CreateNewTriangle ( K3dVector3Obj *_pV0, K3dVector3Obj *_pV1, K3dVector3Obj *_pV2, const K3dVector3Obj *_pNormal )
home / opengl game