Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

OgreMeshFileFormat.h

Go to the documentation of this file.
00001 /*
00002 -----------------------------------------------------------------------------
00003 This source file is part of OGRE
00004     (Object-oriented Graphics Rendering Engine)
00005 For the latest info, see http://www.ogre3d.org/
00006 
00007 Copyright (c) 2000-2005 The OGRE Team
00008 Also see acknowledgements in Readme.html
00009 
00010 This program is free software; you can redistribute it and/or modify it under
00011 the terms of the GNU Lesser General Public License as published by the Free Software
00012 Foundation; either version 2 of the License, or (at your option) any later
00013 version.
00014 
00015 This program is distributed in the hope that it will be useful, but WITHOUT
00016 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
00017 FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
00018 
00019 You should have received a copy of the GNU Lesser General Public License along with
00020 this program; if not, write to the Free Software Foundation, Inc., 59 Temple
00021 Place - Suite 330, Boston, MA 02111-1307, USA, or go to
00022 http://www.gnu.org/copyleft/lesser.txt.
00023 -----------------------------------------------------------------------------
00024 */
00025 #ifndef __MeshFileFormat_H__
00026 #define __MeshFileFormat_H__
00027 
00028 #include "OgrePrerequisites.h"
00029 
00030 namespace Ogre {
00031 
00049     enum MeshChunkID {
00050         M_HEADER                = 0x1000,
00051             // char*          version           : Version number check
00052         M_MESH                = 0x3000,
00053             // bool skeletallyAnimated   // important flag which affects h/w buffer policies
00054             // Optional M_GEOMETRY chunk
00055             M_SUBMESH             = 0x4000, 
00056                 // char* materialName
00057                 // bool useSharedVertices
00058                 // unsigned int indexCount
00059                 // bool indexes32Bit
00060                 // unsigned int* faceVertexIndices (indexCount)
00061                 // OR
00062                 // unsigned short* faceVertexIndices (indexCount)
00063                 // M_GEOMETRY chunk (Optional: present only if useSharedVertices = false)
00064                 M_SUBMESH_OPERATION = 0x4010, // optional, trilist assumed if missing
00065                     // unsigned short operationType
00066                 M_SUBMESH_BONE_ASSIGNMENT = 0x4100,
00067                     // Optional bone weights (repeating section)
00068                     // unsigned int vertexIndex;
00069                     // unsigned short boneIndex;
00070                     // float weight;
00071             M_GEOMETRY          = 0x5000, // NB this chunk is embedded within M_MESH and M_SUBMESH
00072                 // unsigned int vertexCount
00073                 M_GEOMETRY_VERTEX_DECLARATION = 0x5100,
00074                     M_GEOMETRY_VERTEX_ELEMENT = 0x5110, // Repeating section
00075                         // unsigned short source;   // buffer bind source
00076                         // unsigned short type;     // VertexElementType
00077                         // unsigned short semantic; // VertexElementSemantic
00078                         // unsigned short offset;   // start offset in buffer in bytes
00079                         // unsigned short index;    // index of the semantic (for colours and texture coords)
00080                 M_GEOMETRY_VERTEX_BUFFER = 0x5200, // Repeating section
00081                     // unsigned short bindIndex;    // Index to bind this buffer to
00082                     // unsigned short vertexSize;   // Per-vertex size, must agree with declaration at this index
00083                     M_GEOMETRY_VERTEX_BUFFER_DATA = 0x5210,
00084                         // raw buffer data
00085             M_MESH_SKELETON_LINK = 0x6000,
00086                 // Optional link to skeleton
00087                 // char* skeletonName           : name of .skeleton to use
00088             M_MESH_BONE_ASSIGNMENT = 0x7000,
00089                 // Optional bone weights (repeating section)
00090                 // unsigned int vertexIndex;
00091                 // unsigned short boneIndex;
00092                 // float weight;
00093             M_MESH_LOD = 0x8000,
00094                 // Optional LOD information
00095                 // unsigned short numLevels;
00096                 // bool manual;  (true for manual alternate meshes, false for generated)
00097                 M_MESH_LOD_USAGE = 0x8100,
00098                 // Repeating section, ordered in increasing depth
00099                 // NB LOD 0 (full detail from 0 depth) is omitted
00100                 // float fromSquaredDepth;
00101                     M_MESH_LOD_MANUAL = 0x8110,
00102                     // Required if M_MESH_LOD section manual = true
00103                     // String manualMeshName;
00104                     M_MESH_LOD_GENERATED = 0x8120,
00105                     // Required if M_MESH_LOD section manual = false
00106                     // Repeating section (1 per submesh)
00107                     // unsigned int indexCount;
00108                     // bool indexes32Bit
00109                     // unsigned short* faceIndexes;  (indexCount)
00110                     // OR
00111                     // unsigned int* faceIndexes;  (indexCount)
00112             M_MESH_BOUNDS = 0x9000,
00113                 // float minx, miny, minz
00114                 // float maxx, maxy, maxz
00115                 // float radius
00116                     
00117             // Added By DrEvil
00118             // optional chunk that contains a table of submesh indexes and the names of
00119             // the sub-meshes.
00120             M_SUBMESH_NAME_TABLE = 0xA000,
00121                 // Subchunks of the name table. Each chunk contains an index & string
00122                 M_SUBMESH_NAME_TABLE_ELEMENT = 0xA100,
00123                     // short index
00124                     // char* name
00125             
00126             // Optional chunk which stores precomputed edge data                     
00127             M_EDGE_LISTS = 0xB000,
00128                 // Each LOD has a separate edge list
00129                 M_EDGE_LIST_LOD = 0xB100,
00130                     // unsigned short lodIndex
00131                     // bool isManual            // If manual, no edge data here, loaded from manual mesh
00132                         // unsigned long numTriangles
00133                         // unsigned long numEdgeGroups
00134                         // Triangle* triangleList
00135                             // unsigned long indexSet
00136                             // unsigned long vertexSet
00137                             // unsigned long vertIndex[3]
00138                             // unsigned long sharedVertIndex[3] 
00139                             // float normal[4] 
00140 
00141                         M_EDGE_GROUP = 0xB110,
00142                             // unsigned long vertexSet
00143                             // unsigned long numEdges
00144                             // Edge* edgeList
00145                                 // unsigned long  triIndex[2]
00146                                 // unsigned long  vertIndex[2]
00147                                 // unsigned long  sharedVertIndex[2]
00148                                 // bool degenerate
00149                     
00150     
00151     /* Version 1.2 of the .mesh fornmat (deprecated)
00152     enum MeshChunkID {
00153         M_HEADER                = 0x1000,
00154             // char*          version           : Version number check
00155         M_MESH                = 0x3000,
00156             // bool skeletallyAnimated   // important flag which affects h/w buffer policies
00157             // Optional M_GEOMETRY chunk
00158             M_SUBMESH             = 0x4000, 
00159                 // char* materialName
00160                 // bool useSharedVertices
00161                 // unsigned int indexCount
00162                 // bool indexes32Bit
00163                 // unsigned int* faceVertexIndices (indexCount)
00164                 // OR
00165                 // unsigned short* faceVertexIndices (indexCount)
00166                 // M_GEOMETRY chunk (Optional: present only if useSharedVertices = false)
00167                 M_SUBMESH_OPERATION = 0x4010, // optional, trilist assumed if missing
00168                     // unsigned short operationType
00169                 M_SUBMESH_BONE_ASSIGNMENT = 0x4100,
00170                     // Optional bone weights (repeating section)
00171                     // unsigned int vertexIndex;
00172                     // unsigned short boneIndex;
00173                     // float weight;
00174             M_GEOMETRY          = 0x5000, // NB this chunk is embedded within M_MESH and M_SUBMESH
00175             */
00176                 // unsigned int vertexCount
00177                 // float* pVertices (x, y, z order x numVertices)
00178                 M_GEOMETRY_NORMALS = 0x5100,    //(Optional)
00179                     // float* pNormals (x, y, z order x numVertices)
00180                 M_GEOMETRY_COLOURS = 0x5200,    //(Optional)
00181                     // unsigned long* pColours (RGBA 8888 format x numVertices)
00182                 M_GEOMETRY_TEXCOORDS = 0x5300,    //(Optional, REPEATABLE, each one adds an extra set)
00183                     // unsigned short dimensions    (1 for 1D, 2 for 2D, 3 for 3D)
00184                     // float* pTexCoords  (u [v] [w] order, dimensions x numVertices)
00185             /*
00186             M_MESH_SKELETON_LINK = 0x6000,
00187                 // Optional link to skeleton
00188                 // char* skeletonName           : name of .skeleton to use
00189             M_MESH_BONE_ASSIGNMENT = 0x7000,
00190                 // Optional bone weights (repeating section)
00191                 // unsigned int vertexIndex;
00192                 // unsigned short boneIndex;
00193                 // float weight;
00194             M_MESH_LOD = 0x8000,
00195                 // Optional LOD information
00196                 // unsigned short numLevels;
00197                 // bool manual;  (true for manual alternate meshes, false for generated)
00198                 M_MESH_LOD_USAGE = 0x8100,
00199                 // Repeating section, ordered in increasing depth
00200                 // NB LOD 0 (full detail from 0 depth) is omitted
00201                 // float fromSquaredDepth;
00202                     M_MESH_LOD_MANUAL = 0x8110,
00203                     // Required if M_MESH_LOD section manual = true
00204                     // String manualMeshName;
00205                     M_MESH_LOD_GENERATED = 0x8120,
00206                     // Required if M_MESH_LOD section manual = false
00207                     // Repeating section (1 per submesh)
00208                     // unsigned int indexCount;
00209                     // bool indexes32Bit
00210                     // unsigned short* faceIndexes;  (indexCount)
00211                     // OR
00212                     // unsigned int* faceIndexes;  (indexCount)
00213             M_MESH_BOUNDS = 0x9000
00214                 // float minx, miny, minz
00215                 // float maxx, maxy, maxz
00216                 // float radius
00217 
00218             // Added By DrEvil
00219             // optional chunk that contains a table of submesh indexes and the names of
00220             // the sub-meshes.
00221             M_SUBMESH_NAME_TABLE,
00222                 // Subchunks of the name table. Each chunk contains an index & string
00223                 M_SUBMESH_NAME_TABLE_ELEMENT,
00224                     // short index
00225                     // char* name
00226     */
00227     };
00228 } // namespace
00229 
00230 
00231 #endif

Copyright © 2000-2005 by The OGRE Team
Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 2.5 License.
Last modified Sun Feb 12 12:59:48 2006