凸メッシュ

\includegraphics[width=.4\hsize ]{fig/cdconvexmesh.eps}
Fig.  : Convex mesh geometry

凸メッシュ(Fig. #.#.#)のクラスはCDConvexMeshです. 凸メッシュとは凹みや穴を持たない多面体です. 頂点座標を指定することで自由な形を作成することができます.

CDConvexMeshDesc

vector<Vec3f>

vertices

頂点座標の配列

CDConvexMeshIf

Vec3f* GetVertices()

頂点配列の先頭アドレス

int NVertex()

頂点数

CDFaceIf* GetFace(int i)

$i$番目の面

int NFace()

面数

凸メッシュが作成される際,CDConvexMeshDesc::verticesに格納された頂点を内包する最小の凸多面体(凸包)が作成されます. 多面体の面を表すCDFaceのインタフェースを以下に示します.

CDFaceIf

int* GetIndices()

頂点インデックス配列の先頭アドレス

int NIndex()

面の頂点数

NIndexは面を構成する頂点の数を返します(通常$3$$4$です). 面は頂点配列を直接保有せず,インデックス配列として間接的に頂点を参照します. したがって,面の頂点座標を得るには

// given CDConvexMeshIf* mesh
CDFaceIf* face = mesh->GetFace(0);        // get 0-th face
int* idx = face->GetIndices();
Vec3f v = mesh->GetVertices()[idx[0]];    // get 0-th vertex

とします.