OpenCTM : Format de fichier ouvert pour la compression de meshes 3D
Le 2009-09-02 15:01:55, par loka, Rédacteur
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 : |
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 : |
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); |
-
LucyberadMembre du ClubJe suis pas franchement emballé.
Le collada est son principal concurrent et il peine déjà à être porté sur de nombreux éditeurs. Sa force vient pourtant de sa simplicité de syntaxe.
Il a un défaut qu'OpenCTM corrige: il ne propose pas officiellement de version binaire (alors que FBX lui le possède).
Je n'y voit pas vraiment l'intêret au sein d'un jeu (peut-être ailleurs) puisqu'un moteur digne de ce nom possède un principe de "content processing" qui consiste à transformer le modèle donné en binaire "prêt à être chargé en objet" dans le programme (plus clairement: un dump de l'objet qui va être fournit au client (et donc légèrement obsfuqué de la sorte) et rapidement lu par le moteur puisque c'est lui qui crée le dump sans donnée superflues).
Mais ca peut fournir un solution rapide à mettre en place au sein d'un moteur qui n'a pas le temps de voir du content processing s'y greffer.le 02/09/2009 à 16:13 -
KromaggMembre habituéBonjour
Je voulais savoir si OpenCTM supporte les submesh quand il y a différents matériaux appliqués sur un même mesh ?
Kromaggle 20/06/2011 à 14:15