OpenCTM : Format de fichier ouvert pour la compression de meshes 3D

Le , 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 : 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);
et voici comment créer un fichier ctm à partir de votre propre géométrie :

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);
Vous pouvez télécharger le SDK OpenCTM Ici.

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 ?


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de Lucyberad Lucyberad - Membre du Club https://www.developpez.com
le 02/09/2009 à 16:13
Je 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.
Avatar de Kromagg Kromagg - Membre habitué https://www.developpez.com
le 20/06/2011 à 14:15
Bonjour

Je voulais savoir si OpenCTM supporte les submesh quand il y a différents matériaux appliqués sur un même mesh ?

Kromagg
Offres d'emploi IT
Chef projet big data - pse flotte H/F
Safran - Ile de France - Évry (91090)
Ingénieur H/F
Safran - Ile de France - Moissy-Cramayel (77550)
Architecte électronique de puissance expérimenté H/F
Safran - Ile de France - Villaroche - Réau

Voir plus d'offres Voir la carte des offres IT
Responsable bénévole de la rubrique 2D - 3D - Jeux : LittleWhite -