Initiual commit: AssetImporter source moved from ZFXCE repository to its own repository. PLease do not use the ZFXCE repo any more.
git-svn-id: https://assimp.svn.sourceforge.net/svnroot/assimp/trunk@1 67173fc5-114c-0410-ac8e-9d2fd5bffc1f
This commit is contained in:
268
include/aiMesh.h
Normal file
268
include/aiMesh.h
Normal file
@@ -0,0 +1,268 @@
|
||||
/** @file Defines the data structures in which the imported geometry is returned. */
|
||||
#ifndef AI_MESH_H_INC
|
||||
#define AI_MESH_H_INC
|
||||
|
||||
#include "aiTypes.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
/** A single face in a mesh, referring to multiple vertices.
|
||||
* If mNumIndices is 3, the face is a triangle, for mNumIndices > 3 it's a polygon.
|
||||
*/
|
||||
// ---------------------------------------------------------------------------
|
||||
struct aiFace
|
||||
{
|
||||
unsigned int mNumIndices; ///< Number of indices defining this face. 3 for a triangle, >3 for polygon
|
||||
unsigned int* mIndices; ///< Pointer to the indices array. Size of the array is given in numIndices.
|
||||
|
||||
#ifdef __cplusplus
|
||||
aiFace()
|
||||
{
|
||||
mNumIndices = 0; mIndices = NULL;
|
||||
}
|
||||
|
||||
~aiFace()
|
||||
{
|
||||
delete [] mIndices;
|
||||
}
|
||||
|
||||
aiFace( const aiFace& o)
|
||||
{
|
||||
mIndices = NULL;
|
||||
*this = o;
|
||||
}
|
||||
|
||||
const aiFace& operator = ( const aiFace& o)
|
||||
{
|
||||
if (&o == this)
|
||||
return *this;
|
||||
|
||||
delete mIndices;
|
||||
mNumIndices = o.mNumIndices;
|
||||
mIndices = new unsigned int[mNumIndices];
|
||||
memcpy( mIndices, o.mIndices, mNumIndices * sizeof( unsigned int));
|
||||
return *this;
|
||||
}
|
||||
|
||||
#endif // __cplusplus
|
||||
};
|
||||
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
/** A single influence of a bone on a vertex. */
|
||||
// ---------------------------------------------------------------------------
|
||||
struct aiVertexWeight
|
||||
{
|
||||
unsigned int mVertexId; ///< Index of the vertex which is influenced by the bone.
|
||||
float mWeight; ///< The strength of the influence in the range (0...1). The influence from all bones at one vertex amounts to 1.
|
||||
|
||||
#ifdef __cplusplus
|
||||
aiVertexWeight() { }
|
||||
aiVertexWeight( unsigned int pID, float pWeight) : mVertexId( pID), mWeight( pWeight) { }
|
||||
#endif // __cplusplus
|
||||
};
|
||||
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
/** A single bone of a mesh. A bone has a name by which it can be found
|
||||
* in the frame hierarchy and by which it can be addressed by animations.
|
||||
* In addition it has a number of influences on vertices.
|
||||
*/
|
||||
// ---------------------------------------------------------------------------
|
||||
struct aiBone
|
||||
{
|
||||
aiString mName; ///< The name of the bone.
|
||||
unsigned int mNumWeights; ///< The number of vertices affected by this bone
|
||||
aiVertexWeight* mWeights; ///< The vertices affected by this bone
|
||||
aiMatrix4x4 mOffsetMatrix; ///< Matrix that transforms from mesh space to bone space in bind pose
|
||||
|
||||
#ifdef __cplusplus
|
||||
aiBone()
|
||||
{
|
||||
mNumWeights = 0; mWeights = NULL;
|
||||
}
|
||||
|
||||
~aiBone()
|
||||
{
|
||||
delete [] mWeights;
|
||||
}
|
||||
#endif // __cplusplus
|
||||
};
|
||||
|
||||
|
||||
/** Maximum number of vertex color sets per mesh.
|
||||
*
|
||||
* Diffuse, specular, ambient and emissive
|
||||
*/
|
||||
#define AI_MAX_NUMBER_OF_COLOR_SETS 0x4
|
||||
|
||||
|
||||
/** Maximum number of texture coord sets (UV channels) per mesh
|
||||
*/
|
||||
#define AI_MAX_NUMBER_OF_TEXTURECOORDS 0x4
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
/** A mesh represents a geometry or model with a single material.
|
||||
*
|
||||
* It usually consists of a number of vertices and a series of primitives/faces
|
||||
* referencing the vertices. In addition there might be a series of bones, each
|
||||
* of them addressing a number of vertices with a certain weight. Vertex data is
|
||||
* presented in channels with each channel containing a single per-vertex
|
||||
* information such as a set of texture coords or a normal vector.
|
||||
* If a data pointer is non-null, the corresponding data stream is present.
|
||||
* From C++-programs you can also use the comfort functions Has*() to
|
||||
* test for the presence of various data streams.
|
||||
*
|
||||
* A Mesh uses only a single material which is referenced by a material ID.
|
||||
*/
|
||||
struct aiMesh
|
||||
{
|
||||
/** The number of vertices in this mesh.
|
||||
* This is also the size of all of the per-vertex data arrays
|
||||
*/
|
||||
unsigned int mNumVertices;
|
||||
|
||||
/** The number of primitives (triangles, polygones, lines) in this mesh.
|
||||
* This is also the size of the mFaces array
|
||||
*/
|
||||
unsigned int mNumFaces;
|
||||
|
||||
/** Vertex positions.
|
||||
* This array is always present in a mesh. The array is
|
||||
* mNumVertices in size.
|
||||
*/
|
||||
aiVector3D_t* mVertices;
|
||||
|
||||
/** Vertex normals.
|
||||
* The array contains normalized vectors, NULL if not present.
|
||||
* The array is mNumVertices in size.
|
||||
*/
|
||||
aiVector3D_t* mNormals;
|
||||
|
||||
/** Vertex tangents.
|
||||
* The tangent of a vertex points in the direction of the positive
|
||||
* X texture axis. The array contains normalized vectors, NULL if
|
||||
* not present. The array is mNumVertices in size.
|
||||
* @note If the mesh contains tangents, it automatically also
|
||||
* contains bitangents.
|
||||
*/
|
||||
aiVector3D_t* mTangents;
|
||||
|
||||
/** Vertex bitangents.
|
||||
* The bitangent of a vertex points in the direction of the positive
|
||||
* Y texture axis. The array contains normalized vectors, NULL if not
|
||||
* present. The array is mNumVertices in size.
|
||||
* @note If the mesh contains tangents, it automatically also contains
|
||||
* bitangents.
|
||||
*/
|
||||
aiVector3D_t* mBitangents;
|
||||
|
||||
/** Vertex color sets.
|
||||
* A mesh may contain 0 to #AI_MAX_NUMBER_OF_COLOR_SETS vertex
|
||||
* colors per vertex. NULL if not present. Each array is
|
||||
* mNumVertices in size if present.
|
||||
*/
|
||||
aiColor4D_t* mColors[AI_MAX_NUMBER_OF_COLOR_SETS];
|
||||
|
||||
/** Vertex texture coords, also known as UV channels.
|
||||
* A mesh may contain 0 to AI_MAX_NUMBER_OF_TEXTURECOORDS per
|
||||
* vertex. NULL if not present. The array is mNumVertices in size.
|
||||
*/
|
||||
aiVector3D_t* mTextureCoords[AI_MAX_NUMBER_OF_TEXTURECOORDS];
|
||||
|
||||
/** Specifies the number of components for a given UV channel.
|
||||
* Up to three channels are supported (UVW, for accessing volume
|
||||
* or cube maps). If the value is 2 for a given channel n, the
|
||||
* component p.z of mTextureCoords[n][p] is set to 0.0f.
|
||||
* If the value is 1 for a given channel, p.y is set to 0.0f, too.
|
||||
* @note 4D coords are not supported
|
||||
*/
|
||||
unsigned int mNumUVComponents[AI_MAX_NUMBER_OF_TEXTURECOORDS];
|
||||
|
||||
/** The faces the mesh is contstructed from.
|
||||
* Each face referres to a number of vertices by their indices.
|
||||
* This array is always present in a mesh, its size is given
|
||||
* in mNumFaces.
|
||||
*/
|
||||
aiFace* mFaces;
|
||||
|
||||
/** The number of bones this mesh contains.
|
||||
* Can be 0, in which case the mBones array is NULL.
|
||||
*/
|
||||
unsigned int mNumBones;
|
||||
|
||||
/** The bones of this mesh.
|
||||
* A bone consists of a name by which it can be found in the
|
||||
* frame hierarchy and a set of vertex weights.
|
||||
*/
|
||||
aiBone** mBones;
|
||||
|
||||
/** The material used by this mesh.
|
||||
* A mesh does use only a single material. If an imported model uses multiple materials,
|
||||
* the import splits up the mesh. Use this value as index into the scene's material list.
|
||||
*/
|
||||
unsigned int mMaterialIndex;
|
||||
|
||||
#ifdef __cplusplus
|
||||
aiMesh()
|
||||
{
|
||||
mNumVertices = 0; mNumFaces = 0;
|
||||
mVertices = NULL; mFaces = NULL;
|
||||
mNormals = NULL; mTangents = NULL;
|
||||
mBitangents = NULL;
|
||||
for( unsigned int a = 0; a < AI_MAX_NUMBER_OF_TEXTURECOORDS; a++)
|
||||
{
|
||||
mNumUVComponents[a] = 0;
|
||||
mTextureCoords[a] = NULL;
|
||||
}
|
||||
for( unsigned int a = 0; a < AI_MAX_NUMBER_OF_COLOR_SETS; a++)
|
||||
mColors[a] = NULL;
|
||||
mNumBones = 0; mBones = NULL;
|
||||
mMaterialIndex = 0;
|
||||
}
|
||||
|
||||
~aiMesh()
|
||||
{
|
||||
delete [] mVertices;
|
||||
delete [] mFaces;
|
||||
delete [] mNormals;
|
||||
delete [] mTangents;
|
||||
delete [] mBitangents;
|
||||
for( unsigned int a = 0; a < AI_MAX_NUMBER_OF_TEXTURECOORDS; a++)
|
||||
delete [] mTextureCoords[a];
|
||||
for( unsigned int a = 0; a < AI_MAX_NUMBER_OF_COLOR_SETS; a++)
|
||||
delete [] mColors[a];
|
||||
for( unsigned int a = 0; a < mNumBones; a++)
|
||||
delete mBones[a];
|
||||
delete [] mBones;
|
||||
}
|
||||
|
||||
bool HasNormals() const { return mNormals != NULL; }
|
||||
bool HasTangentsAndBitangents() const { return mTangents != NULL && mBitangents != NULL; }
|
||||
bool HasVertexColors( unsigned int pIndex)
|
||||
{
|
||||
if( pIndex >= AI_MAX_NUMBER_OF_COLOR_SETS)
|
||||
return false;
|
||||
else
|
||||
return mColors[pIndex] != NULL;
|
||||
}
|
||||
bool HasTextureCoords( unsigned int pIndex)
|
||||
{
|
||||
if( pIndex > AI_MAX_NUMBER_OF_TEXTURECOORDS)
|
||||
return false;
|
||||
else
|
||||
return mTextureCoords[pIndex] != NULL;
|
||||
}
|
||||
bool HasBones() const { return mBones != NULL; }
|
||||
|
||||
#endif // __cplusplus
|
||||
};
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // AI_MESH_H_INC
|
||||
Reference in New Issue
Block a user