source: GTP/trunk/Lib/Geom/shared/GeoTool/include/GeoMeshLoader.h @ 826

Revision 826, 4.9 KB checked in by gumbau, 19 years ago (diff)

Modification Stripify for mesh discrimination.
Adds submesh operation type.

Line 
1/*      ==========================================================================
2 *      (C) 2005 Universitat Jaume I
3 *      ==========================================================================
4 *      PROYECT:        GAME TOOLS
5 *      =========================================================================*/
6/**     CONTENT:       
7        *
8        *
9        *       @file   GeoMeshLoader.h
10/*===========================================================================*/
11#ifndef __GEO_MESH_LOADER__
12#define __GEO_MESH_LOADER__
13
14#include <stdio.h>
15#include <stdlib.h>
16#include <string>
17#include <vector>
18#include <memory.h>
19#include <time.h>
20#include <iostream>
21#include <iomanip>
22#include "GeoBase.h"
23#include "GeoMesh.h"
24
25namespace Geometry
26{
27        const   unsigned        short   CHUNK_OVERHEAD_SIZE     = sizeof(unsigned short)
28                                                                                                                                                                                        +
29                                                                                                                                                                                        sizeof(unsigned long);
30
31        const unsigned  short M_HEADER                                                                                  = 0x1000;
32        const unsigned  short M_MESH                                                                                            = 0x3000;
33        const unsigned  short M_SUBMESH                                                                                 = 0x4000;
34        const unsigned  short M_SUBMESH_OPERATION                                               = 0x4010;
35        const unsigned  short M_SUBMESH_BONE_ASSIGNMENT                 = 0x4100;
36        const unsigned  short M_GEOMETRY                                                                                = 0x5000;
37        const unsigned  short M_GEOMETRY_VERTEX_DECLARATION = 0x5100;
38        const unsigned  short M_GEOMETRY_VERTEX_ELEMENT                 = 0x5110;
39        const unsigned  short M_GEOMETRY_VERTEX_BUFFER                  = 0x5200;
40        const unsigned  short M_GEOMETRY_VERTEX_BUFFER_DATA = 0x5210;
41        const unsigned  short M_MESH_SKELETON_LINK                                      = 0x6000;
42        const unsigned  short M_MESH_BONE_ASSIGNMENT                            = 0x7000;
43        const unsigned  short M_MESH_LOD                                                                                =       0x8000;
44        const unsigned  short M_MESH_LOD_USAGE                                                  =       0x8100;
45        const unsigned  short M_MESH_LOD_MANUAL                                                 =       0x8110;
46        const unsigned  short M_MESH_LOD_GENERATED                                      =       0x8120;
47        const unsigned  short M_MESH_BOUNDS                                                                     =       0x9000;
48        const unsigned  short M_SUBMESH_NAME_TABLE                                      =       0xA000;
49        const unsigned  short   M_SUBMESH_NAME_TABLE_ELEMENT    =       0xA100;
50        const unsigned  short M_EDGE_LISTS                                                                      =       0xB000;
51        const unsigned  short M_EDGE_LIST_LOD                                                           =       0xB100;
52        const unsigned  short M_EDGE_GROUP                                                                      = 0xB110;
53        const   unsigned        short   SUBMESH_COUNT                                                                   =       0;
54        const   unsigned        short   GEOMESH_BUILD                                                                   =       1;
55       
56        enum VertexElementType
57        {
58                VET_FLOAT1,
59                VET_FLOAT2,
60                VET_FLOAT3,
61                VET_FLOAT4,
62                VET_COLOUR,
63                VET_SHORT1,
64                VET_SHORT2,
65                VET_SHORT3,
66                VET_SHORT4,
67                VET_UBYTE4
68        };
69
70        enum VertexElementSemantic
71        {
72                /// Position, 3 reals per vertex
73                VES_POSITION = 1,
74                /// Blending weights
75                VES_BLEND_WEIGHTS = 2,
76                /// Blending indices
77                VES_BLEND_INDICES = 3,
78                /// Normal, 3 reals per vertex
79                VES_NORMAL = 4,
80                /// Diffuse colours
81                VES_DIFFUSE = 5,
82                /// Specular colours
83                VES_SPECULAR = 6,
84                /// Texture coordinates
85                VES_TEXTURE_COORDINATES = 7,
86                /// Binormal (Y axis if normal is Z)
87                VES_BINORMAL = 8,
88                /// Tangent (X axis if normal is Z)
89                VES_TANGENT = 9
90        };
91
92        //      Bounding Box data.
93        struct  GeometryBounds
94        {
95                float   minx;
96                float   miny;
97                float   minz;
98                float   maxx;
99                float   maxy;
100                float   maxz;
101                float   radius;
102        };
103       
104        /// Mesh class interface
105        class GeoMeshLoader
106        {
107                private:
108                       
109                        Mesh                                            *geoMesh;
110                        size_t                                  mFileSize;
111                        unsigned        int             numVertices;
112                        unsigned        long    long_actual;
113                        char                                            *nom_salida;
114                        size_t                                  currentSubMesh;
115
116                        struct GeometryElement
117                        {
118                                unsigned short offset;
119                                unsigned short semantic;
120                                unsigned short type;
121                                unsigned short index;
122                        };
123
124                        struct GT
125                        {
126                                unsigned short source; //bindIndex
127                                std::vector <GeometryElement> list;
128                        };
129
130                        std::vector <GT> list;
131
132                        //      Jump a chunk.
133                        void jumpChunk(FILE     *f);
134
135                        //      Read a chunk.
136                        unsigned short readChunk(FILE   *f);
137
138                        //      Read geometry vertex element.
139                        void readGeometryVertexElement(FILE     *f, Mesh        *geoMesh);
140
141                        //      Read geometry vertex declaration.
142                        void readGeometryVertexDeclaration(FILE *f, Mesh        *geoMesh);
143
144                        //      Read geometry vertex buffer.
145                        void readGeometryVertexBuffer(FILE              *f,
146                                                                                                                                                Mesh            *geoMesh,
147                                                                                                                                                int             option);
148
149                        //      Read geometry.
150                        void readGeometry(FILE  *f, Mesh        *geoMesh, int option);
151
152                        //      Read a submesh operation.
153                        void readSubMeshOperation(FILE  *f, Mesh        *geoMesh, int option);
154
155                        //      Read a submesh.
156                        void readSubMesh(FILE   *f, Mesh        *geoMesh, int option);
157
158                        //      Read a mesh lod information.
159                        void readMeshLodInfo(FILE       *f, Mesh        *geoMesh);
160
161                        //      Read a submesh name table.
162                        void readSubMeshNameTable(FILE  *f, Mesh        *geoMesh);
163
164                        //      Read a mesh file.
165                        void readMesh(FILE      *f, Mesh        *geoMesh, int option);
166
167                        //      Writes the strips list.
168                        SubMesh* GeoMeshLoader::BuildStripsGeoSubMesh(SubMesh* geoSubMesh);
169                       
170                public:
171
172                        //      Constructor.
173                        GeoMeshLoader();
174
175                        //      Destroyer.
176                        ~GeoMeshLoader();
177
178                        //      Loads a Mesh file.
179                        Mesh* load(char *fileNameMesh);
180
181                        //      Get the size in bytes of the file.
182                        size_t  getFileSize();
183        };
184}
185#endif
186
Note: See TracBrowser for help on using the repository browser.