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なのはおかしい

さらにどこかで変換されている?