OpenCTM is an open file format for storing compressed triangle meshes. In order to easily read and write OpenCTM files (usually suffixed .ctm) an API (Application Program Interface) is provided that can easily be used from most modern programming languages.
The OpenCTM functionality itself is written in highly portable standard C (C99).
For information about how to use the OpenCTM API, see openctm.h.
For information about the C++ wrapper classes, see CTMimporter and CTMexporter.
Here is a simple example of loading a CTM file:
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);
Here is a simple example of creating a CTM file:
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);
Copyright © 2009-2010 Marcus Geelnard — openctm.sourceforge.net