refactoring
This commit is contained in:
@ -59,7 +59,9 @@ struct qhFace
|
||||
|
||||
u32 GetVertexCount() const;
|
||||
u32 GetEdgeCount() const;
|
||||
qhHalfEdge* FindTwin(const qhVertex* tail, const qhVertex* head) const;
|
||||
|
||||
qhHalfEdge* FindHalfEdge(const qhVertex* v1, const qhVertex* v2) const;
|
||||
|
||||
void ComputeCenterAndPlane();
|
||||
};
|
||||
|
||||
@ -117,6 +119,7 @@ public:
|
||||
void Draw() const;
|
||||
private:
|
||||
bool BuildInitialHull(const b3Vec3* vertices, u32 count);
|
||||
qhFace* AddFace(qhVertex* v1, qhVertex* v2, qhVertex* v3);
|
||||
|
||||
qhVertex* FindEyeVertex() const;
|
||||
void AddVertex(qhVertex* v);
|
||||
@ -124,13 +127,12 @@ private:
|
||||
void FindHorizon(qhVertex* eye);
|
||||
|
||||
void AddNewFaces(qhVertex* eye);
|
||||
void AddNewFace(qhVertex* v1, qhVertex* v2, qhVertex* v3);
|
||||
|
||||
void MergeFaces();
|
||||
bool MergeFace(qhFace* face);
|
||||
|
||||
qhFace* CreateTriangle(qhVertex* v1, qhVertex* v2, qhVertex* v3);
|
||||
qhHalfEdge* CreateAdjoiningTriangle(qhVertex* v, qhHalfEdge* he);
|
||||
|
||||
qhHalfEdge* FindTwin(const qhVertex* tail, const qhVertex* head) const;
|
||||
qhHalfEdge* FindHalfEdge(const qhVertex* v1, const qhVertex* v2) const;
|
||||
|
||||
// Coplanarity tolerance
|
||||
float32 m_tolerance;
|
||||
|
@ -66,15 +66,12 @@ inline u32 qhFace::GetEdgeCount() const
|
||||
return count;
|
||||
}
|
||||
|
||||
inline qhHalfEdge* qhFace::FindTwin(const qhVertex* tail, const qhVertex* head) const
|
||||
inline qhHalfEdge* qhFace::FindHalfEdge(const qhVertex* v1, const qhVertex* v2) const
|
||||
{
|
||||
qhHalfEdge* e = edge;
|
||||
do
|
||||
{
|
||||
qhVertex* tail2 = e->tail;
|
||||
qhVertex* head2 = e->next->tail;
|
||||
|
||||
if (tail2 == tail && head2 == head)
|
||||
if (e->tail == v1 && e->next->tail == v2)
|
||||
{
|
||||
return e;
|
||||
}
|
||||
@ -137,7 +134,7 @@ constexpr u32 qhGetBufferSize(u32 pointCount)
|
||||
u32 E = 3 * V - 6;
|
||||
u32 HE = 2 * E;
|
||||
u32 F = 2 * V - 4;
|
||||
|
||||
|
||||
size += V * sizeof(qhVertex);
|
||||
size += HE * sizeof(qhHalfEdge);
|
||||
size += F * sizeof(qhFace);
|
||||
@ -148,11 +145,11 @@ constexpr u32 qhGetBufferSize(u32 pointCount)
|
||||
|
||||
// Horizon
|
||||
size += HE * sizeof(qhHalfEdge*);
|
||||
|
||||
|
||||
// New Faces
|
||||
// One face per horizon edge
|
||||
size += HE * sizeof(qhFace*);
|
||||
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
@ -206,17 +203,15 @@ inline void qhHull::FreeFace(qhFace* f)
|
||||
m_freeFaces = f;
|
||||
}
|
||||
|
||||
inline qhHalfEdge* qhHull::FindTwin(const qhVertex* tail, const qhVertex* head) const
|
||||
inline qhHalfEdge* qhHull::FindHalfEdge(const qhVertex* v1, const qhVertex* v2) const
|
||||
{
|
||||
qhFace* face = m_faceList.head;
|
||||
while (face)
|
||||
for (qhFace* face = m_faceList.head; face != NULL; face = face->next)
|
||||
{
|
||||
qhHalfEdge* e = face->FindTwin(tail, head);
|
||||
qhHalfEdge* e = face->FindHalfEdge(v1, v2);
|
||||
if (e)
|
||||
{
|
||||
return e;
|
||||
}
|
||||
face = face->next;
|
||||
}
|
||||
return NULL;
|
||||
}
|
Reference in New Issue
Block a user