COLLADAの穴(CvPolygonについて)
●vettexNodesに頂点インデクスが入っている インデクスの-1は穴インデクスとの区切り ポリゴンインデクス, ..., -1, 穴インデクス1, ..., -1, 穴インデクス2, ... ●vettexNodes.GLVertexは使っていない? 実際の頂点データはCvVetrexに入っている ●NumOgVertexNodesが頂点インデクス数 ●Traiangulationが実際に表示する分割三角形の頂点データ Cv_PolygonTriangulate()を呼び出すと頂点データから分割三角形が設定される
- プロジェクトの準備
viewerからコピーしたソース construct.c monotone.c tri.c Triangulation.c Vector.c triangulate.h コピーしたヘッダファイルのディレクトリ・ファイル Cv DAE libxml Platform iconv.h
- ソース
#include<stdio.h> #include "triangulate.h" main() { CvPolygon cvp; CvVertexNode cvvn[] = { {0, NULL}, {1, NULL}, {2, NULL}, {3, NULL}, {-1, NULL}, {4, NULL}, {5, NULL}, {6, NULL}, {7, NULL}, {-1, NULL}, {8, NULL}, {9, NULL}, {10, NULL}, {11, NULL},}; CvVertex cvv[] = { {-5, 4, 0, 0}, {-5,-4, 0, 0}, { 5,-4, 0, 0}, { 5, 4, 0, 0}, {-1, 2, 0, 0}, {-1,-2, 0, 0}, {-4,-2, 0, 0}, {-4, 2, 0, 0}, { 4, 2, 0, 0}, { 4,-2, 0, 0}, { 1,-2, 0, 0}, { 1, 2, 0, 0},}; int i; cvp.NumOfVertexNodes = 14; cvp.VertexNodes = cvvn; // ポリゴン分割 Cv_PolygonTriangulate(&cvp, cvv, 12); // 分割されたポリゴンの頂点インデクス for (i = 0; i < cvp.Triangulation.NumOfTri; i++) { printf("%d, %d, %d\n", cvp.Triangulation.Triangles[i].Vertex[0], cvp.Triangulation.Triangles[i].Vertex[1], cvp.Triangulation.Triangles[i].Vertex[2]); } }
- 結果
- 頂点インデクスが13なのはおかしい
さらにどこかで変換されている?