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 // Optional chunk that matches a texture name to an alias 00072 // a texture alias is sent to the submesh material to use this texture name 00073 // instead of the one in the texture unit with a matching alias name 00074 M_SUBMESH_TEXTURE_ALIAS = 0x4200, // Repeating section 00075 // char* aliasName; 00076 // char* textureName; 00077 00078 M_GEOMETRY = 0x5000, // NB this chunk is embedded within M_MESH and M_SUBMESH 00079 // unsigned int vertexCount 00080 M_GEOMETRY_VERTEX_DECLARATION = 0x5100, 00081 M_GEOMETRY_VERTEX_ELEMENT = 0x5110, // Repeating section 00082 // unsigned short source; // buffer bind source 00083 // unsigned short type; // VertexElementType 00084 // unsigned short semantic; // VertexElementSemantic 00085 // unsigned short offset; // start offset in buffer in bytes 00086 // unsigned short index; // index of the semantic (for colours and texture coords) 00087 M_GEOMETRY_VERTEX_BUFFER = 0x5200, // Repeating section 00088 // unsigned short bindIndex; // Index to bind this buffer to 00089 // unsigned short vertexSize; // Per-vertex size, must agree with declaration at this index 00090 M_GEOMETRY_VERTEX_BUFFER_DATA = 0x5210, 00091 // raw buffer data 00092 M_MESH_SKELETON_LINK = 0x6000, 00093 // Optional link to skeleton 00094 // char* skeletonName : name of .skeleton to use 00095 M_MESH_BONE_ASSIGNMENT = 0x7000, 00096 // Optional bone weights (repeating section) 00097 // unsigned int vertexIndex; 00098 // unsigned short boneIndex; 00099 // float weight; 00100 M_MESH_LOD = 0x8000, 00101 // Optional LOD information 00102 // unsigned short numLevels; 00103 // bool manual; (true for manual alternate meshes, false for generated) 00104 M_MESH_LOD_USAGE = 0x8100, 00105 // Repeating section, ordered in increasing depth 00106 // NB LOD 0 (full detail from 0 depth) is omitted 00107 // float fromSquaredDepth; 00108 M_MESH_LOD_MANUAL = 0x8110, 00109 // Required if M_MESH_LOD section manual = true 00110 // String manualMeshName; 00111 M_MESH_LOD_GENERATED = 0x8120, 00112 // Required if M_MESH_LOD section manual = false 00113 // Repeating section (1 per submesh) 00114 // unsigned int indexCount; 00115 // bool indexes32Bit 00116 // unsigned short* faceIndexes; (indexCount) 00117 // OR 00118 // unsigned int* faceIndexes; (indexCount) 00119 M_MESH_BOUNDS = 0x9000, 00120 // float minx, miny, minz 00121 // float maxx, maxy, maxz 00122 // float radius 00123 00124 // Added By DrEvil 00125 // optional chunk that contains a table of submesh indexes and the names of 00126 // the sub-meshes. 00127 M_SUBMESH_NAME_TABLE = 0xA000, 00128 // Subchunks of the name table. Each chunk contains an index & string 00129 M_SUBMESH_NAME_TABLE_ELEMENT = 0xA100, 00130 // short index 00131 // char* name 00132 00133 // Optional chunk which stores precomputed edge data 00134 M_EDGE_LISTS = 0xB000, 00135 // Each LOD has a separate edge list 00136 M_EDGE_LIST_LOD = 0xB100, 00137 // unsigned short lodIndex 00138 // bool isManual // If manual, no edge data here, loaded from manual mesh 00139 // unsigned long numTriangles 00140 // unsigned long numEdgeGroups 00141 // Triangle* triangleList 00142 // unsigned long indexSet 00143 // unsigned long vertexSet 00144 // unsigned long vertIndex[3] 00145 // unsigned long sharedVertIndex[3] 00146 // float normal[4] 00147 00148 M_EDGE_GROUP = 0xB110, 00149 // unsigned long vertexSet 00150 // unsigned long numEdges 00151 // Edge* edgeList 00152 // unsigned long triIndex[2] 00153 // unsigned long vertIndex[2] 00154 // unsigned long sharedVertIndex[2] 00155 // bool degenerate 00156 00157 // Optional poses section, referred to by pose keyframes 00158 M_POSES = 0xC000, 00159 M_POSE = 0xC100, 00160 // char* name (may be blank) 00161 // unsigned short target // 0 for shared geometry, 00162 // 1+ for submesh index + 1 00163 M_POSE_VERTEX = 0xC111, 00164 // unsigned long vertexIndex 00165 // float xoffset, yoffset, zoffset 00166 // Optional vertex animation chunk 00167 M_ANIMATIONS = 0xD000, 00168 M_ANIMATION = 0xD100, 00169 // char* name 00170 // float length 00171 M_ANIMATION_TRACK = 0xD110, 00172 // unsigned short type // 1 == morph, 2 == pose 00173 // unsigned short target // 0 for shared geometry, 00174 // 1+ for submesh index + 1 00175 M_ANIMATION_MORPH_KEYFRAME = 0xD111, 00176 // float time 00177 // float x,y,z // repeat by number of vertices in original geometry 00178 M_ANIMATION_POSE_KEYFRAME = 0xD112, 00179 // float time 00180 M_ANIMATION_POSE_REF = 0xD113, // repeat for number of referenced poses 00181 // unsigned short poseIndex 00182 // float influence 00183 00184 00185 00186 /* Version 1.2 of the .mesh fornmat (deprecated) 00187 enum MeshChunkID { 00188 M_HEADER = 0x1000, 00189 // char* version : Version number check 00190 M_MESH = 0x3000, 00191 // bool skeletallyAnimated // important flag which affects h/w buffer policies 00192 // Optional M_GEOMETRY chunk 00193 M_SUBMESH = 0x4000, 00194 // char* materialName 00195 // bool useSharedVertices 00196 // unsigned int indexCount 00197 // bool indexes32Bit 00198 // unsigned int* faceVertexIndices (indexCount) 00199 // OR 00200 // unsigned short* faceVertexIndices (indexCount) 00201 // M_GEOMETRY chunk (Optional: present only if useSharedVertices = false) 00202 M_SUBMESH_OPERATION = 0x4010, // optional, trilist assumed if missing 00203 // unsigned short operationType 00204 M_SUBMESH_BONE_ASSIGNMENT = 0x4100, 00205 // Optional bone weights (repeating section) 00206 // unsigned int vertexIndex; 00207 // unsigned short boneIndex; 00208 // float weight; 00209 M_GEOMETRY = 0x5000, // NB this chunk is embedded within M_MESH and M_SUBMESH 00210 */ 00211 // unsigned int vertexCount 00212 // float* pVertices (x, y, z order x numVertices) 00213 M_GEOMETRY_NORMALS = 0x5100, //(Optional) 00214 // float* pNormals (x, y, z order x numVertices) 00215 M_GEOMETRY_COLOURS = 0x5200, //(Optional) 00216 // unsigned long* pColours (RGBA 8888 format x numVertices) 00217 M_GEOMETRY_TEXCOORDS = 0x5300, //(Optional, REPEATABLE, each one adds an extra set) 00218 // unsigned short dimensions (1 for 1D, 2 for 2D, 3 for 3D) 00219 // float* pTexCoords (u [v] [w] order, dimensions x numVertices) 00220 /* 00221 M_MESH_SKELETON_LINK = 0x6000, 00222 // Optional link to skeleton 00223 // char* skeletonName : name of .skeleton to use 00224 M_MESH_BONE_ASSIGNMENT = 0x7000, 00225 // Optional bone weights (repeating section) 00226 // unsigned int vertexIndex; 00227 // unsigned short boneIndex; 00228 // float weight; 00229 M_MESH_LOD = 0x8000, 00230 // Optional LOD information 00231 // unsigned short numLevels; 00232 // bool manual; (true for manual alternate meshes, false for generated) 00233 M_MESH_LOD_USAGE = 0x8100, 00234 // Repeating section, ordered in increasing depth 00235 // NB LOD 0 (full detail from 0 depth) is omitted 00236 // float fromSquaredDepth; 00237 M_MESH_LOD_MANUAL = 0x8110, 00238 // Required if M_MESH_LOD section manual = true 00239 // String manualMeshName; 00240 M_MESH_LOD_GENERATED = 0x8120, 00241 // Required if M_MESH_LOD section manual = false 00242 // Repeating section (1 per submesh) 00243 // unsigned int indexCount; 00244 // bool indexes32Bit 00245 // unsigned short* faceIndexes; (indexCount) 00246 // OR 00247 // unsigned int* faceIndexes; (indexCount) 00248 M_MESH_BOUNDS = 0x9000 00249 // float minx, miny, minz 00250 // float maxx, maxy, maxz 00251 // float radius 00252 00253 // Added By DrEvil 00254 // optional chunk that contains a table of submesh indexes and the names of 00255 // the sub-meshes. 00256 M_SUBMESH_NAME_TABLE, 00257 // Subchunks of the name table. Each chunk contains an index & string 00258 M_SUBMESH_NAME_TABLE_ELEMENT, 00259 // short index 00260 // char* name 00261 00262 */ 00263 }; 00264 } // namespace 00265 00266 00267 #endif
Copyright © 2000-2005 by The OGRE Team
This work is licensed under a Creative Commons Attribution-ShareAlike 2.5 License.
Last modified Sun Mar 12 14:37:44 2006