source: Packages/nr3d/Geometry.h @ 1

Revision 1, 4.1 KB checked in by art, 13 years ago (diff)
Line 
1/***************************************************************************
2 *                                                                         *
3 *   (c) Art Tevs, MPI Informatik Saarbruecken                             *
4 *       mailto: <tevs@mpi-sb.mpg.de>                                      *
5 *                                                                         *
6 *   This program is free software; you can redistribute it and/or modify  *
7 *   it under the terms of the GNU General Public License as published by  *
8 *   the Free Software Foundation; either version 2 of the License, or     *
9 *   (at your option) any later version.                                   *
10 *                                                                         *
11 ***************************************************************************/
12
13#ifndef __NR3D_GEOMETRY_H_
14#define __NR3D_GEOMETRY_H_
15
16//----------------------------------------------------------------------------------
17// Includes
18//----------------------------------------------------------------------------------
19#include <nrEngine/nrEngine.h>
20#include "nr3D.h"
21
22namespace nrEngine {
23
24        namespace nr3D {
25               
26                //! Geometry class represents the geometry in our 3d world
27                /**
28                 * A geometry object does contain mesh information. This are information
29                 * like vertices, normals, tangents, colours, texture coordinates and
30                 * other things which can be passed to graphics pipeline.
31                 *
32                 * Actually geometry should also be a resource object controlled by resource
33                 * management system. However we decided to use Meshes as resources. So that
34                 * each mesh containing the geometry is controlled by resource management.
35                 * This could prevent strange artifacts if a mesh is depending somehow on geometry
36                 * data (i.e. for animation or collision detection). So we do not get a part
37                 * of a mesh unloaded while another is still in the memory.
38                 *
39                 * \ingroup nr3d
40                **/
41                class _NRPackageExport Geometry{
42
43                        public:
44
45                                /**
46                                 * Create an empty geometry object.
47                                 **/
48                                Geometry();
49                                 
50                                /**
51                                * Create geometry by copiing it from another one
52                                **/
53                                Geometry(const Geometry& g);
54
55                                /**
56                                * Remove used memory, so geometry data is not used anymore
57                                **/
58                                virtual ~Geometry();
59
60                                /**
61                                 * Check whenever the geometry object does contain any data.
62                                 * @return false if no data available
63                                 **/
64                                //bool isEmpty() const;
65
66                                /**
67                                 * Add new primitive array containing primitives to this geometry
68                                 * object. The data will be copied, so you have then to release the old one.
69                                 *
70                                 * @param arr Smart array containing primitives
71                                 **/
72                                 //void addPrimitives();
73
74                                 /**
75                                  * Set vertex array containing all verticies for this geometry mesh
76                                  * The array will be copied into internal data structures. So you
77                                  * have to care about what will happen with original data.
78                                  *
79                                  * @param array Array containing the vertices data
80                                  **/
81                                void setVertexArray(const std::vector<vec3>& data);
82
83                                /**
84                                 * Same as setVertexArray() but for color information on vertices
85                                 **/
86                                void setColorArray(const std::vector<vec4>& data);
87
88                                /**
89                                 * Set normals for verticies
90                                 **/
91                                void setNormalArray(const std::vector<vec3>& data);
92
93                                /**
94                                 * Set texture coordinates array. For each texture, we have 3 coordinates
95                                 **/
96                                void setTexCoordArray(uint32 unit, const std::vector<vec3>& data);
97
98                                /**
99                                 * Vertex attributes
100                                **/
101                                void setVertexAttribArray(uint32 unit, const std::vector<vec3>& data);
102                                       
103                        protected:
104
105                                //! Store verticies of the geometry here
106                                std::vector<vec3>       mVertexArray;
107
108                                //! Store normals here
109                                std::vector<vec3>       mNormalArray;
110
111                                //! Store color information here
112                                std::vector<vec3>       mColorArray;
113
114                                //! Store texture coordinates here
115                                std::map<uint32, std::vector<vec3> >    mTexCoordArray;
116
117                                //! Store here vertex attributes
118                                std::map<uint32, std::vector<vec3> >    mVertexAttribArray;
119                                               
120                                /**
121                                * Cause the geometry data to empty all buffers.
122                                * After applying this method you have no more access
123                                * to any data.
124                                **/
125                                //void emptyBuffers();
126                               
127        };
128};
129
130#endif
131
Note: See TracBrowser for help on using the repository browser.