Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

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

Le , par loka

0PARTAGES

0  0 


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 ?

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de 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.
0  0 
Avatar de 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
0  0