initial commit
This commit is contained in:
167
trimeshloader/include/tl3ds.h
Normal file
167
trimeshloader/include/tl3ds.h
Normal file
@ -0,0 +1,167 @@
|
||||
/*
|
||||
* Copyright (c) 2007 Gero Mueller <gero.mueller@cloo.de>
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
*
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
*
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
*
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
*
|
||||
* 3. This notice may not be removed or altered from any source
|
||||
* distribution.
|
||||
*/
|
||||
|
||||
#ifndef TRIMESH_LOADER_3DS_H
|
||||
#define TRIMESH_LOADER_3DS_H
|
||||
|
||||
/**
|
||||
@file tl3ds.h
|
||||
@brief Trimeshloader 3DS parser public header file
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifndef TRIMESH_LOADER_EXPORT
|
||||
#define TRIMESH_LOADER_API
|
||||
#else
|
||||
#define TRIMESH_LOADER_API extern
|
||||
#endif
|
||||
|
||||
/** @defgroup low_level_3ds_api Trimeshloader low level 3DS API
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** Structure describing the parsing state. the user has no direkt access to it. */
|
||||
typedef struct tl3dsState tl3dsState;
|
||||
|
||||
/** Create a new parsing state.
|
||||
* \return A new parsing state, which needs to be deleted after parsing. NULL on error.
|
||||
*/
|
||||
TRIMESH_LOADER_API tl3dsState *tl3dsCreateState();
|
||||
|
||||
/** Reset the parsing state
|
||||
* \param state pointer to an previously created state.
|
||||
*/
|
||||
TRIMESH_LOADER_API int tl3dsResetState( tl3dsState *state );
|
||||
|
||||
/** Destroy a previously created state.
|
||||
* \param state pointer to an previously created state.
|
||||
*/
|
||||
TRIMESH_LOADER_API void tl3dsDestroyState( tl3dsState *state );
|
||||
|
||||
/** Parse a chunk of data.
|
||||
* \param state a previously created state.
|
||||
* \param buffer pointer to the chunk of data to be parsed
|
||||
* \param length number of bytes to be parsed
|
||||
* \param last indicator if this is the last chunk. 1 = yes, 0 = no.
|
||||
* \return Returns 0 on success, 1 on error.
|
||||
*/
|
||||
TRIMESH_LOADER_API int tl3dsParse(
|
||||
tl3dsState *state,
|
||||
const char *buffer,
|
||||
unsigned int length,
|
||||
int last );
|
||||
|
||||
/* data access */
|
||||
TRIMESH_LOADER_API unsigned int tl3dsObjectCount( tl3dsState *state );
|
||||
|
||||
TRIMESH_LOADER_API const char *tl3dsObjectName(
|
||||
tl3dsState *state,
|
||||
unsigned int object );
|
||||
|
||||
TRIMESH_LOADER_API unsigned int tl3dsObjectFaceCount(
|
||||
tl3dsState *state,
|
||||
unsigned int object );
|
||||
|
||||
TRIMESH_LOADER_API unsigned int tl3dsObjectFaceIndex(
|
||||
tl3dsState *state,
|
||||
unsigned int object );
|
||||
|
||||
TRIMESH_LOADER_API unsigned int tl3dsMaterialCount( tl3dsState *state );
|
||||
|
||||
TRIMESH_LOADER_API const char *tl3dsMaterialName(
|
||||
tl3dsState *state,
|
||||
unsigned int object );
|
||||
|
||||
TRIMESH_LOADER_API int tl3dsGetMaterial(
|
||||
tl3dsState *state,
|
||||
unsigned int index,
|
||||
float *ambient,
|
||||
float *diffuse,
|
||||
float *specular,
|
||||
float *reflect );
|
||||
|
||||
TRIMESH_LOADER_API unsigned int tl3dsMaterialReferenceCount( tl3dsState *state );
|
||||
|
||||
TRIMESH_LOADER_API const char *tl3dsMaterialReferenceName(
|
||||
tl3dsState *state,
|
||||
unsigned int object );
|
||||
|
||||
TRIMESH_LOADER_API int tl3dsGetMaterialReference(
|
||||
tl3dsState *state,
|
||||
unsigned int index,
|
||||
unsigned int *face_index,
|
||||
unsigned int *face_count );
|
||||
|
||||
TRIMESH_LOADER_API unsigned int tl3dsVertexCount( tl3dsState *state );
|
||||
|
||||
TRIMESH_LOADER_API int tl3dsGetVertexDouble(
|
||||
tl3dsState *state,
|
||||
unsigned int index,
|
||||
double *x, double *y, double *z,
|
||||
double *tu, double *tv,
|
||||
double *nx, double *ny, double *nz );
|
||||
|
||||
TRIMESH_LOADER_API int tl3dsGetVertex(
|
||||
tl3dsState *state,
|
||||
unsigned int index,
|
||||
float *x, float *y, float *z,
|
||||
float *tu, float *tv,
|
||||
float *nx, float *ny, float *nz );
|
||||
|
||||
TRIMESH_LOADER_API unsigned int tl3dsFaceCount(
|
||||
tl3dsState *state );
|
||||
|
||||
TRIMESH_LOADER_API int tl3dsGetFaceInt(
|
||||
tl3dsState *state,
|
||||
unsigned int index,
|
||||
unsigned int *a,
|
||||
unsigned int *b,
|
||||
unsigned int *c );
|
||||
|
||||
TRIMESH_LOADER_API int tl3dsGetFace(
|
||||
tl3dsState *state,
|
||||
unsigned int index,
|
||||
unsigned short *a,
|
||||
unsigned short *b,
|
||||
unsigned short *c );
|
||||
|
||||
TRIMESH_LOADER_API int tl3dsCheckFileExtension( const char *filename );
|
||||
|
||||
/** Check if the loaded mesh has normals. 3DS does not support normals. It is for convenience only, and always returns 0.
|
||||
* \param state a previously created state.
|
||||
* \return Returns 0 if no normals are present, >0 if they are.
|
||||
*/
|
||||
TRIMESH_LOADER_API unsigned int tl3dsHasNormals( tl3dsState *state );
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
158
trimeshloader/include/tlobj.h
Normal file
158
trimeshloader/include/tlobj.h
Normal file
@ -0,0 +1,158 @@
|
||||
/*
|
||||
* Copyright (c) 2007 Gero Mueller <gero.mueller@cloo.de>
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
*
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
*
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
*
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
*
|
||||
* 3. This notice may not be removed or altered from any source
|
||||
* distribution.
|
||||
*/
|
||||
|
||||
#ifndef TRIMESH_LOADER_OBJ_H
|
||||
#define TRIMESH_LOADER_OBJ_H
|
||||
|
||||
/**
|
||||
@file tlobj.h
|
||||
@brief Trimeshloader OBJ parser public header file
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifndef TRIMESH_LOADER_EXPORT
|
||||
#define TRIMESH_LOADER_API
|
||||
#else
|
||||
#define TRIMESH_LOADER_API extern
|
||||
#endif
|
||||
|
||||
/** @defgroup low_level_obj_api Trimeshloader low level OBJ API
|
||||
* @{
|
||||
*/
|
||||
|
||||
typedef struct tlObjState tlObjState;
|
||||
|
||||
/* state handling */
|
||||
TRIMESH_LOADER_API tlObjState *tlObjCreateState();
|
||||
|
||||
TRIMESH_LOADER_API int tlObjResetState( tlObjState *state );
|
||||
|
||||
TRIMESH_LOADER_API void tlObjDestroyState( tlObjState *state );
|
||||
|
||||
/* parsing */
|
||||
TRIMESH_LOADER_API int tlObjParse(
|
||||
tlObjState *state,
|
||||
const char *buffer,
|
||||
unsigned int length,
|
||||
int last );
|
||||
|
||||
/* data access */
|
||||
TRIMESH_LOADER_API unsigned int tlObjObjectCount( tlObjState *state );
|
||||
|
||||
TRIMESH_LOADER_API const char *tlObjObjectName(
|
||||
tlObjState *state,
|
||||
unsigned int object );
|
||||
|
||||
TRIMESH_LOADER_API unsigned int tlObjObjectFaceCount(
|
||||
tlObjState *state,
|
||||
unsigned int object );
|
||||
|
||||
TRIMESH_LOADER_API unsigned int tlObjObjectFaceIndex(
|
||||
tlObjState *state,
|
||||
unsigned int object );
|
||||
|
||||
TRIMESH_LOADER_API unsigned int tlObjMaterialCount( tlObjState *state );
|
||||
|
||||
TRIMESH_LOADER_API const char *tlObjMaterialName(
|
||||
tlObjState *state,
|
||||
unsigned int object );
|
||||
|
||||
TRIMESH_LOADER_API unsigned int tlObjMaterialLibCount( tlObjState *state );
|
||||
|
||||
TRIMESH_LOADER_API const char *tlObjMaterialLibName(
|
||||
tlObjState *state,
|
||||
unsigned int object );
|
||||
|
||||
TRIMESH_LOADER_API int tlObjGetMaterial(
|
||||
tlObjState *state,
|
||||
unsigned int index,
|
||||
float *ambient,
|
||||
float *diffuse,
|
||||
float *specular,
|
||||
float *reflect );
|
||||
|
||||
TRIMESH_LOADER_API unsigned int tlObjMaterialReferenceCount( tlObjState *state );
|
||||
|
||||
TRIMESH_LOADER_API const char *tlObjMaterialReferenceName(
|
||||
tlObjState *state,
|
||||
unsigned int object );
|
||||
|
||||
TRIMESH_LOADER_API int tlObjGetMaterialReference(
|
||||
tlObjState *state,
|
||||
unsigned int index,
|
||||
unsigned int *face_index,
|
||||
unsigned int *face_count );
|
||||
|
||||
TRIMESH_LOADER_API unsigned int tlObjVertexCount( tlObjState *state );
|
||||
|
||||
TRIMESH_LOADER_API int tlObjGetVertexDouble(
|
||||
tlObjState *state,
|
||||
unsigned int index,
|
||||
double *x, double *y, double *z,
|
||||
double *tu, double *tv,
|
||||
double *nx, double *ny, double *nz );
|
||||
|
||||
TRIMESH_LOADER_API int tlObjGetVertex(
|
||||
tlObjState *state,
|
||||
unsigned int index,
|
||||
float *x, float *y, float *z,
|
||||
float *tu, float *tv,
|
||||
float *nx, float *ny, float *nz );
|
||||
|
||||
TRIMESH_LOADER_API unsigned int tlObjFaceCount(
|
||||
tlObjState *state );
|
||||
|
||||
TRIMESH_LOADER_API int tlObjGetFaceInt(
|
||||
tlObjState *state,
|
||||
unsigned int index,
|
||||
unsigned int *a,
|
||||
unsigned int *b,
|
||||
unsigned int *c );
|
||||
|
||||
TRIMESH_LOADER_API int tlObjGetFace(
|
||||
tlObjState *state,
|
||||
unsigned int index,
|
||||
unsigned short *a,
|
||||
unsigned short *b,
|
||||
unsigned short *c );
|
||||
|
||||
TRIMESH_LOADER_API int tlObjCheckFileExtension( const char *filename );
|
||||
|
||||
/** Check if the loaded mesh has normals.
|
||||
* \param state a previously created state.
|
||||
* \return Returns 0 if no normals are present, >0 if they are.
|
||||
*/
|
||||
TRIMESH_LOADER_API unsigned int tlObjHasNormals( tlObjState *state );
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
199
trimeshloader/include/trimeshloader.h
Normal file
199
trimeshloader/include/trimeshloader.h
Normal file
@ -0,0 +1,199 @@
|
||||
/*
|
||||
* Copyright (c) 2007 Gero Mueller <gero.mueller@cloo.de>
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
*
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
*
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
*
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
*
|
||||
* 3. This notice may not be removed or altered from any source
|
||||
* distribution.
|
||||
*/
|
||||
|
||||
/** \mainpage trimeshloader-0.1.0
|
||||
* \section project_page Project Page
|
||||
* \url http://sourceforge.net/projects/trimeshloader
|
||||
* \section website Website with tutorials
|
||||
* \url http://trimeshloader.sourceforge.net
|
||||
*/
|
||||
|
||||
/**
|
||||
@file trimeshloader.h
|
||||
@brief Trimeshloader public header file
|
||||
*/
|
||||
|
||||
#ifndef TRIMESH_LOADER_H
|
||||
#define TRIMESH_LOADER_H
|
||||
|
||||
#include "tlobj.h"
|
||||
#include "tl3ds.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifndef TRIMESH_LOADER_EXPORT
|
||||
#define TRIMESH_LOADER_API
|
||||
#else
|
||||
#define TRIMESH_LOADER_API extern
|
||||
#endif
|
||||
|
||||
|
||||
/** @defgroup high_level_api Trimeshloader high level API
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** Structure describing an Object (or SubMesh, Batch) */
|
||||
typedef struct tlObject
|
||||
{
|
||||
/** Name of the Object */
|
||||
char *name;
|
||||
|
||||
/** First face in the index list */
|
||||
unsigned int face_index;
|
||||
|
||||
/** Face count */
|
||||
unsigned int face_count;
|
||||
|
||||
} tlObject;
|
||||
|
||||
/** Used as format flag in loading functions: load the position of the vertex */
|
||||
#define TL_FVF_XYZ 1
|
||||
|
||||
/** Used as format flag in loading functions: load the texturecoordinate of the vertex */
|
||||
#define TL_FVF_UV 2
|
||||
|
||||
/** Used as format flag in loading functions: load the normal of the vertex */
|
||||
#define TL_FVF_NORMAL 4
|
||||
|
||||
/** Structure describing a Material (Colors and/or Texture) */
|
||||
typedef struct tlMaterial
|
||||
{
|
||||
/** Name of the Material */
|
||||
char *name;
|
||||
|
||||
/** RGBA Colors */
|
||||
float ambient[4], diffuse[4], specular[4];
|
||||
|
||||
/** Shininess */
|
||||
float shininess;
|
||||
|
||||
} tlMaterial;
|
||||
|
||||
/** Structure describing the reference to a Material */
|
||||
typedef struct tlMaterialReference
|
||||
{
|
||||
/** Name of the Material */
|
||||
char *name;
|
||||
|
||||
/** First face in the index list */
|
||||
unsigned int face_index;
|
||||
|
||||
/** Face count */
|
||||
unsigned int face_count;
|
||||
|
||||
} tlMaterialReference;
|
||||
|
||||
/** Structure describing an Trimesh (index triangle list) containing objects, vertices (point, texture coordinate and normal) and triangle indices */
|
||||
typedef struct tlTrimesh
|
||||
{
|
||||
/** pointer to the vertex data */
|
||||
float *vertices;
|
||||
|
||||
/** number of vertices */
|
||||
unsigned int vertex_count;
|
||||
|
||||
/** format of the vertices */
|
||||
unsigned int vertex_format;
|
||||
|
||||
/** size/stride of each vertex, in bytes */
|
||||
unsigned int vertex_size;
|
||||
|
||||
/** pointer to the face (triangle) indices (3 unsigned shorts) */
|
||||
unsigned short *faces;
|
||||
|
||||
/** number of faces */
|
||||
unsigned int face_count;
|
||||
|
||||
/** list of objects in this trimesh */
|
||||
tlObject *objects;
|
||||
|
||||
/** number of objects */
|
||||
unsigned int object_count;
|
||||
|
||||
/** list of materials in this trimesh */
|
||||
tlMaterial *materials;
|
||||
|
||||
/** number of materials */
|
||||
unsigned int material_count;
|
||||
|
||||
/** list of references to materials in this trimesh */
|
||||
tlMaterialReference *material_references;
|
||||
|
||||
/** number of references to materials */
|
||||
unsigned int material_reference_count;
|
||||
|
||||
} tlTrimesh;
|
||||
|
||||
|
||||
/** Load a 3DS file in an tlTrimesh structure
|
||||
* \param filename Pointer to NULL-terminated string containing the filename
|
||||
* \param vertex_format Defines the vertex format. any format combination of TL_FVF_XYZ, TL_FVF_UV, TL_FVF_NORMAL
|
||||
* \return Returns a new tlTrimesh object, which needs to be deleted with tlDeleteTrimesh. NULL on error.
|
||||
*/
|
||||
TRIMESH_LOADER_API tlTrimesh *tlLoad3DS( const char*filename, unsigned int vertex_format );
|
||||
|
||||
|
||||
/** Load a OBJ file in an tlTrimesh structure
|
||||
* \param filename Pointer to NULL-terminated string containing the filename
|
||||
* \param vertex_format Defines the vertex format. any format combination of TL_FVF_XYZ, TL_FVF_UV, TL_FVF_NORMAL
|
||||
* \return Returns a new tlTrimesh object, which needs to be deleted with tlDeleteTrimesh. NULL on error.
|
||||
*/
|
||||
TRIMESH_LOADER_API tlTrimesh *tlLoadOBJ( const char*filename, unsigned int vertex_format );
|
||||
|
||||
/** Create an a tlTrimesh structure from a tlObjState
|
||||
* \param state Pointer to state after parsing.
|
||||
* \param vertex_format Defines the vertex format. any format combination of TL_FVF_XYZ, TL_FVF_UV, TL_FVF_NORMAL
|
||||
* \return Returns a new tlTrimesh object, which needs to be deleted with tlDeleteTrimesh. NULL on error.
|
||||
*/
|
||||
TRIMESH_LOADER_API tlTrimesh *tlCreateTrimeshFromObjState( tlObjState *state, unsigned int vertex_format );
|
||||
|
||||
/** Create an a tlTrimesh structure from a tl3dsState
|
||||
* \param state Pointer to state after parsing.
|
||||
* \param vertex_format Defines the vertex format. any format combination of TL_FVF_XYZ, TL_FVF_UV, TL_FVF_NORMAL
|
||||
* \return Returns a new tlTrimesh object, which needs to be deleted with tlDeleteTrimesh. NULL on error.
|
||||
*/
|
||||
TRIMESH_LOADER_API tlTrimesh *tlCreateTrimeshFrom3dsState( tl3dsState *state, unsigned int vertex_format );
|
||||
|
||||
/** Load an 3DS or OBJ file in an tlTrimesh structure. Automatic extension parsing is done.
|
||||
* \param filename Pointer to NULL-terminated string containing the filename
|
||||
* \param vertex_format Defines the vertex format. any format combination of TL_FVF_XYZ, TL_FVF_UV, TL_FVF_NORMAL
|
||||
* \return Returns a new tlTrimesh object, which needs to be deleted with tlDeleteTrimesh. NULL on error.
|
||||
*/
|
||||
TRIMESH_LOADER_API tlTrimesh *tlLoadTrimesh( const char*filename, unsigned int vertex_format );
|
||||
|
||||
/** Delete an previously loaded tlTrimesh object
|
||||
* \param trimesh Previously loaded tlTrimesh object
|
||||
*/
|
||||
TRIMESH_LOADER_API void tlDeleteTrimesh( tlTrimesh *trimesh );
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /*TRIMESHLOADER_H_*/
|
Reference in New Issue
Block a user