COLLADAの穴(解決?)
三角形分割用の頂点データと、表示に使う頂点データが別だった
#include<windows.h> #include<stdio.h> #include "triangulate.h" #include <GL/gl.h> #include <GL/glut.h> #include <GL/glaux.h> 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 cvv2[] = { {{-5, 4, 0}, 0}, {{-5,-4, 0}, 0}, {{ 5,-4, 0}, 0}, {{ 5, 4, 0}, 0}, {{ 0, 0, 0}, 0}, // ここと {{-1, 2, 0}, 0}, {{-1,-2, 0}, 0}, {{-4,-2, 0}, 0}, {{-4, 2, 0}, 0}, {{ 0, 0, 0}, 0}, // ここに空白の頂点が必要だった {{ 4, 2, 0}, 0}, {{ 4,-2, 0}, 0}, {{ 1,-2, 0}, 0}, {{ 1, 2, 0}, 0},}; // 三角形分割用頂点リスト 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},}; void resize(int w, int h) { glViewport(0, 0, w, h); glMatrixMode( GL_PROJECTION ); glLoadIdentity(); gluPerspective(30.0, (double)w / (double)h, 1.0, 32767); glTranslated(0.0, 0.0, -5.0); gluLookAt(0.0, 12.0, 42.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); } void disp() { int i, j, k; glClearColor(0 , 0 , 0 , 0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPolygonMode(GL_FRONT,GL_LINE); glBegin(GL_TRIANGLES); 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]); for (j = 0; j < 3; j++) { k = cvp.Triangulation.Triangles[i].Vertex[j]; glVertex3f(cvv2[k].X, cvv2[k].Y, cvv2[k].Z); } } glEnd(); glMatrixMode( GL_MODELVIEW ); glLoadIdentity(); glFlush(); } int init(int argc, char *argv[]) { glutInit(&argc , argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA| GLUT_DEPTH); glutCreateWindow("COLLADA穴"); glutDisplayFunc(disp); glutReshapeFunc(resize); glMatrixMode(GL_PROJECTION); glEnable(GL_DEPTH_TEST); } void initPolygon() { int i; cvp.NumOfVertexNodes = 14; cvp.VertexNodes = cvvn; // ポリゴン分割 Cv_PolygonTriangulate(&cvp, cvv, 12); } main(int argc, char *argv[]) { initPolygon(); init(argc, argv); glutMainLoop(); }