OpenCTM est un format de fichier et une librarie pour les meshes 3D (CTM = Compressed 3D Triangle Meshes). La geométrie est compressée à une fraction de formats de fichiers comparable(3DS, STL, VRML...) et le format est facilement accessible via une API simple et portable.
Les grandes geométries supérieurs au milliard de triangles et arêtes peuvent être stockées (OpenCTM utilise des indices de face 32-bit). Le SDK OpenCTM est open source et est écris en C.
Voici comment charger un fichier ctm :
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #include CTMcontext context; CTMuint vertCount, triCount, * indices; CTMfloat * vertices; // Create a new context context = ctmNewContext(CTM_IMPORT); // Load the OpenCTM file ctmLoad(context, "mymesh.ctm"); if(ctmGetError(context) == CTM_NONE) { // Access the mesh data vertCount = ctmGetInteger(context, CTM_VERTEX_COUNT); vertices = ctmGetFloatArray(context, CTM_VERTICES); triCount = ctmGetInteger(context, CTM_TRIANGLE_COUNT); indices = ctmGetIntegerArray(context, CTM_INDICES); // Deal with the mesh (e.g. transcode it to our // internal representation) // ... } // Free the context ctmFreeContext(context); |
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | #include CTMcontext context; CTMuint vertCount, triCount, * indices; CTMfloat * vertices; // Create our mesh in memory vertCount = 100; triCount = 120; vertices = (CTMfloat*)malloc(3*sizeof(CTMfloat)*vertCount); indices = (CTMuint*)malloc(3*sizeof(CTMuint)*triCount); // ... // Create a new context context = ctmNewContext(CTM_EXPORT); // Define our mesh representation to OpenCTM (store // references to it in the context) ctmDefineMesh(context, vertices, vertCount, indices, triCount, NULL); // Save the OpenCTM file ctmSave(context, "mymesh.ctm"); // Free the context ctmFreeContext(context); // Free our mesh free(indices); free(vertices); |
Pensez-vous qu'il soit necessaire de créer de nouveau format de compression pour les meshes 3D ?
Ces nouveaux formats de compression vont-il permettre aux graphistes 3D de mieux s'exprimer ?