Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: downloads/ogre_src_v1-9-0/OgreMain/include/OgreMeshFileFormat.h @ 148

Last change on this file since 148 was 148, checked in by patricwi, 6 years ago

Added new dependencies for ogre1.9 and cegui0.8

File size: 13.1 KB
Line 
1/*
2-----------------------------------------------------------------------------
3This source file is part of OGRE
4    (Object-oriented Graphics Rendering Engine)
5For the latest info, see http://www.ogre3d.org/
6
7Copyright (c) 2000-2013 Torus Knot Software Ltd
8
9Permission is hereby granted, free of charge, to any person obtaining a copy
10of this software and associated documentation files (the "Software"), to deal
11in the Software without restriction, including without limitation the rights
12to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13copies of the Software, and to permit persons to whom the Software is
14furnished to do so, subject to the following conditions:
15
16The above copyright notice and this permission notice shall be included in
17all copies or substantial portions of the Software.
18
19THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
25THE SOFTWARE.
26-----------------------------------------------------------------------------
27*/
28#ifndef __MeshFileFormat_H__
29#define __MeshFileFormat_H__
30
31#include "OgrePrerequisites.h"
32
33namespace Ogre {
34
35        /** \addtogroup Core
36        *  @{
37        */
38        /** \addtogroup Resources
39        *  @{
40        */
41/** Definition of the OGRE .mesh file format
42
43    .mesh files are binary files (for read efficiency at runtime) and are arranged into chunks
44    of data, very like 3D Studio's format.
45    A chunk always consists of:
46        unsigned short CHUNK_ID        : one of the following chunk ids identifying the chunk
47        unsigned long  LENGTH          : length of the chunk in bytes, including this header
48        void*          DATA            : the data, which may contain other sub-chunks (various data types)
49   
50    A .mesh file can contain both the definition of the Mesh itself, and optionally the definitions
51    of the materials is uses (although these can be omitted, if so the Mesh assumes that at runtime the
52    Materials referred to by name in the Mesh are loaded/created from another source)
53
54    A .mesh file only contains a single mesh, which can itself have multiple submeshes.
55
56*/
57
58        enum MeshChunkID {
59        M_HEADER                = 0x1000,
60            // char*          version           : Version number check
61        M_MESH                = 0x3000,
62                        // bool skeletallyAnimated   // important flag which affects h/w buffer policies
63            // Optional M_GEOMETRY chunk
64            M_SUBMESH             = 0x4000, 
65                // char* materialName
66                // bool useSharedVertices
67                // unsigned int indexCount
68                // bool indexes32Bit
69                // unsigned int* faceVertexIndices (indexCount)
70                // OR
71                // unsigned short* faceVertexIndices (indexCount)
72                // M_GEOMETRY chunk (Optional: present only if useSharedVertices = false)
73                M_SUBMESH_OPERATION = 0x4010, // optional, trilist assumed if missing
74                    // unsigned short operationType
75                M_SUBMESH_BONE_ASSIGNMENT = 0x4100,
76                    // Optional bone weights (repeating section)
77                    // unsigned int vertexIndex;
78                    // unsigned short boneIndex;
79                    // float weight;
80                        // Optional chunk that matches a texture name to an alias
81                // a texture alias is sent to the submesh material to use this texture name
82                // instead of the one in the texture unit with a matching alias name
83                M_SUBMESH_TEXTURE_ALIAS = 0x4200, // Repeating section
84                    // char* aliasName;
85                    // char* textureName;
86
87            M_GEOMETRY          = 0x5000, // NB this chunk is embedded within M_MESH and M_SUBMESH
88                // unsigned int vertexCount
89                                M_GEOMETRY_VERTEX_DECLARATION = 0x5100,
90                                        M_GEOMETRY_VERTEX_ELEMENT = 0x5110, // Repeating section
91                                                // unsigned short source;       // buffer bind source
92                                                // unsigned short type;         // VertexElementType
93                                                // unsigned short semantic; // VertexElementSemantic
94                                                // unsigned short offset;       // start offset in buffer in bytes
95                                                // unsigned short index;        // index of the semantic (for colours and texture coords)
96                                M_GEOMETRY_VERTEX_BUFFER = 0x5200, // Repeating section
97                                        // unsigned short bindIndex;    // Index to bind this buffer to
98                                        // unsigned short vertexSize;   // Per-vertex size, must agree with declaration at this index
99                                        M_GEOMETRY_VERTEX_BUFFER_DATA = 0x5210,
100                                                // raw buffer data
101            M_MESH_SKELETON_LINK = 0x6000,
102                // Optional link to skeleton
103                // char* skeletonName           : name of .skeleton to use
104            M_MESH_BONE_ASSIGNMENT = 0x7000,
105                // Optional bone weights (repeating section)
106                // unsigned int vertexIndex;
107                // unsigned short boneIndex;
108                // float weight;
109            M_MESH_LOD = 0x8000,
110                // Optional LOD information
111                // string strategyName;
112                // unsigned short numLevels;
113                // bool manual;  (true for manual alternate meshes, false for generated)
114                M_MESH_LOD_USAGE = 0x8100,
115                // Repeating section, ordered in increasing depth
116                                // NB LOD 0 (full detail from 0 depth) is omitted
117                                // LOD value - this is a distance, a pixel count etc, based on strategy
118                // float lodValue;
119                    M_MESH_LOD_MANUAL = 0x8110,
120                    // Required if M_MESH_LOD section manual = true
121                    // String manualMeshName;
122                    M_MESH_LOD_GENERATED = 0x8120,
123                    // Required if M_MESH_LOD section manual = false
124                                        // Repeating section (1 per submesh)
125                    // unsigned int indexCount;
126                    // bool indexes32Bit
127                    // unsigned short* faceIndexes;  (indexCount)
128                    // OR
129                    // unsigned int* faceIndexes;  (indexCount)
130            M_MESH_BOUNDS = 0x9000,
131                // float minx, miny, minz
132                // float maxx, maxy, maxz
133                // float radius
134                   
135                        // Added By DrEvil
136                        // optional chunk that contains a table of submesh indexes and the names of
137                        // the sub-meshes.
138                        M_SUBMESH_NAME_TABLE = 0xA000,
139                                // Subchunks of the name table. Each chunk contains an index & string
140                                M_SUBMESH_NAME_TABLE_ELEMENT = 0xA100,
141                        // short index
142                    // char* name
143                       
144                        // Optional chunk which stores precomputed edge data                                     
145                        M_EDGE_LISTS = 0xB000,
146                                // Each LOD has a separate edge list
147                                M_EDGE_LIST_LOD = 0xB100,
148                                        // unsigned short lodIndex
149                                        // bool isManual                        // If manual, no edge data here, loaded from manual mesh
150                        // bool isClosed
151                        // unsigned long numTriangles
152                        // unsigned long numEdgeGroups
153                                                // Triangle* triangleList
154                            // unsigned long indexSet
155                            // unsigned long vertexSet
156                            // unsigned long vertIndex[3]
157                            // unsigned long sharedVertIndex[3]
158                            // float normal[4]
159
160                        M_EDGE_GROUP = 0xB110,
161                            // unsigned long vertexSet
162                            // unsigned long triStart
163                            // unsigned long triCount
164                            // unsigned long numEdges
165                                                    // Edge* edgeList
166                                // unsigned long  triIndex[2]
167                                // unsigned long  vertIndex[2]
168                                // unsigned long  sharedVertIndex[2]
169                                // bool degenerate
170
171                        // Optional poses section, referred to by pose keyframes
172                        M_POSES = 0xC000,
173                                M_POSE = 0xC100,
174                                        // char* name (may be blank)
175                                        // unsigned short target        // 0 for shared geometry,
176                                                                                                // 1+ for submesh index + 1
177                                        // bool includesNormals [1.8+]
178                                        M_POSE_VERTEX = 0xC111,
179                                                // unsigned long vertexIndex
180                                                // float xoffset, yoffset, zoffset
181                                                // float xnormal, ynormal, znormal (optional, 1.8+)
182                        // Optional vertex animation chunk
183                        M_ANIMATIONS = 0xD000, 
184                                M_ANIMATION = 0xD100,
185                                // char* name
186                                // float length
187                                M_ANIMATION_BASEINFO = 0xD105,
188                                // [Optional] base keyframe information (pose animation only)
189                                // char* baseAnimationName (blank for self)
190                                // float baseKeyFrameTime
191               
192                                M_ANIMATION_TRACK = 0xD110,
193                                        // unsigned short type                  // 1 == morph, 2 == pose
194                                        // unsigned short target                // 0 for shared geometry,
195                                                                                                        // 1+ for submesh index + 1
196                                        M_ANIMATION_MORPH_KEYFRAME = 0xD111,
197                                                // float time
198                                                // bool includesNormals [1.8+]
199                                                // float x,y,z                  // repeat by number of vertices in original geometry
200                                        M_ANIMATION_POSE_KEYFRAME = 0xD112,
201                                                // float time
202                                                M_ANIMATION_POSE_REF = 0xD113, // repeat for number of referenced poses
203                                                        // unsigned short poseIndex
204                                                        // float influence
205
206                        // Optional submesh extreme vertex list chink
207                        M_TABLE_EXTREMES = 0xE000,
208                        // unsigned short submesh_index;
209                        // float extremes [n_extremes][3];
210
211        /* Version 1.2 of the .mesh format (deprecated)
212        enum MeshChunkID {
213        M_HEADER                = 0x1000,
214            // char*          version           : Version number check
215        M_MESH                = 0x3000,
216                        // bool skeletallyAnimated   // important flag which affects h/w buffer policies
217            // Optional M_GEOMETRY chunk
218            M_SUBMESH             = 0x4000,
219                // char* materialName
220                // bool useSharedVertices
221                // unsigned int indexCount
222                // bool indexes32Bit
223                // unsigned int* faceVertexIndices (indexCount)
224                // OR
225                // unsigned short* faceVertexIndices (indexCount)
226                // M_GEOMETRY chunk (Optional: present only if useSharedVertices = false)
227                M_SUBMESH_OPERATION = 0x4010, // optional, trilist assumed if missing
228                    // unsigned short operationType
229                M_SUBMESH_BONE_ASSIGNMENT = 0x4100,
230                    // Optional bone weights (repeating section)
231                    // unsigned int vertexIndex;
232                    // unsigned short boneIndex;
233                    // float weight;
234            M_GEOMETRY          = 0x5000, // NB this chunk is embedded within M_MESH and M_SUBMESH
235                        */
236                // unsigned int vertexCount
237                // float* pVertices (x, y, z order x numVertices)
238                M_GEOMETRY_NORMALS = 0x5100,    //(Optional)
239                    // float* pNormals (x, y, z order x numVertices)
240                M_GEOMETRY_COLOURS = 0x5200,    //(Optional)
241                    // unsigned long* pColours (RGBA 8888 format x numVertices)
242                M_GEOMETRY_TEXCOORDS = 0x5300    //(Optional, REPEATABLE, each one adds an extra set)
243                    // unsigned short dimensions    (1 for 1D, 2 for 2D, 3 for 3D)
244                    // float* pTexCoords  (u [v] [w] order, dimensions x numVertices)
245                        /*
246            M_MESH_SKELETON_LINK = 0x6000,
247                // Optional link to skeleton
248                // char* skeletonName           : name of .skeleton to use
249            M_MESH_BONE_ASSIGNMENT = 0x7000,
250                // Optional bone weights (repeating section)
251                // unsigned int vertexIndex;
252                // unsigned short boneIndex;
253                // float weight;
254            M_MESH_LOD = 0x8000,
255                // Optional LOD information
256                // unsigned short numLevels;
257                // bool manual;  (true for manual alternate meshes, false for generated)
258                M_MESH_LOD_USAGE = 0x8100,
259                // Repeating section, ordered in increasing depth
260                                // NB LOD 0 (full detail from 0 depth) is omitted
261                // float fromSquaredDepth;
262                    M_MESH_LOD_MANUAL = 0x8110,
263                    // Required if M_MESH_LOD section manual = true
264                    // String manualMeshName;
265                    M_MESH_LOD_GENERATED = 0x8120,
266                    // Required if M_MESH_LOD section manual = false
267                                        // Repeating section (1 per submesh)
268                    // unsigned int indexCount;
269                    // bool indexes32Bit
270                    // unsigned short* faceIndexes;  (indexCount)
271                    // OR
272                    // unsigned int* faceIndexes;  (indexCount)
273            M_MESH_BOUNDS = 0x9000
274                // float minx, miny, minz
275                // float maxx, maxy, maxz
276                // float radius
277
278                        // Added By DrEvil
279                        // optional chunk that contains a table of submesh indexes and the names of
280                        // the sub-meshes.
281                        M_SUBMESH_NAME_TABLE,
282                                // Subchunks of the name table. Each chunk contains an index & string
283                                M_SUBMESH_NAME_TABLE_ELEMENT,
284                        // short index
285                    // char* name
286
287        */
288    };
289        /** @} */
290        /** @} */
291
292} // namespace
293
294
295#endif
Note: See TracBrowser for help on using the repository browser.