My Project
IsoSurfaceBuilder.h
1 #pragma once
2 
3 #include "DataGrid.h"
4 #include <vector>
5 
6 namespace ParaEngine
7 {
12  {
13  public:
14  friend class IsoSurfaceRenderable;
17  {
19  GEN_NORMALS = 0x01,
24  };
25 
27  {
34  };
35 
39  virtual ~IsoSurfaceBuilder();
45  virtual void initialize(DataGrid* dg, int flags);
47  void update(IsoSurfaceRenderable * isr);
49  DataGrid* getDataGrid() {return mDataGrid.get(); }
51  float getIsoValue() const {return mIsoValue; }
53  void setIsoValue(float isoValue) {mIsoValue = isoValue; }
55  bool getFlipNormals() const {return mFlipNormals; }
60  void setFlipNormals(bool flipNormals) {mFlipNormals = flipNormals; }
64  void setNormalType(NormalType normalType) {mNormalType = normalType; }
65 
70 
72  virtual int getNumIsoVertices();
74  virtual void createGridCellIsoVertices();
76  virtual void buildIsoSurface();
77 
78  protected:
79 
81  struct IsoTriangle
82  {
84  int vertices[3];
85  };
86 
88  struct GridCell
89  {
90  GridCell():isoVertices(NULL){};
103  int cornerIndices[8];
106  };
107 
108  typedef std::vector<int> IsoVertexVector;
109  typedef std::vector<IsoTriangle> IsoTriangleVector;
110 
116  float mIsoValue;
151  IsoVertexVector mIsoVertices;
155  IsoTriangleVector mIsoTriangles;
156 
158  static const int msEdgeTable[256];
160  static const int msTriangleTable[256][16];
161  //#include "IsoSurfaceBuilderTables.h"
162 
168  void createIsoVertices();
174  void createGridCells();
176  void destroyGridCells();
188  int useIsoVertex(int isoVertex, int corner0, int corner1);
190  void addIsoTriangle(const IsoTriangle& isoTriangle);
191  };
192 }
193 
Color * mIsoVertexColours
Vertex colours for all iso vertices.
Definition: IsoSurfaceBuilder.h:140
void createIsoVertices()
Creates the iso vertex arrays.
Definition: IsoSurfaceBuilder.cpp:100
bool getFlipNormals() const
Returns whether normals are flipped.
Definition: IsoSurfaceBuilder.h:55
Grid cell.
Definition: IsoSurfaceBuilder.h:88
int * isoVertices
Iso vertex indices of this grid cell.
Definition: IsoSurfaceBuilder.h:105
Renderable object for the dynamically generated IsoSurface or voxel mesh.
Definition: IsoSurfaceRenderable.h:15
int mNumIsoVertices
The number of iso vertices, calculated on first call of getNumIsoVertices().
Definition: IsoSurfaceBuilder.h:67
IsoTriangleVector mIsoTriangles
Vector to which all generated iso triangles are added.
Definition: IsoSurfaceBuilder.h:155
DataGridPtr mDataGrid
Reference-counted shared pointer to the data grid associated with this iso surface.
Definition: IsoSurfaceBuilder.h:112
SurfaceFlags
Flags describing what data is generated for rendering the iso surface.
Definition: IsoSurfaceBuilder.h:16
different physics engine has different winding order.
Definition: EventBinding.h:32
void createGridCells()
Creates and initializes the grid cells.
Definition: IsoSurfaceBuilder.cpp:128
Class providing a 3d grid of data values and methods for accessing and modifying it.
Definition: DataGrid.h:14
Vector3 * mIsoVertexNormals
Normals for all iso vertices.
Definition: IsoSurfaceBuilder.h:135
IsoVertexVector mIsoVertices
Vector to which the indices of all used iso vertices are added.
Definition: IsoSurfaceBuilder.h:151
Generate texture coordinates.
Definition: IsoSurfaceBuilder.h:23
Standard 3-dimensional vector.
Definition: ParaVector3.h:16
NormalType getNormalType() const
Gets the method used for normal generation.
Definition: IsoSurfaceBuilder.h:62
IsoSurfaceBuilder()
Constructor.
Definition: IsoSurfaceBuilder.cpp:19
void setFlipNormals(bool flipNormals)
Sets whether to flip normals.
Definition: IsoSurfaceBuilder.h:60
void setIsoValue(float isoValue)
Sets the iso value of the surface.
Definition: IsoSurfaceBuilder.h:53
virtual void initialize(DataGrid *dg, int flags)
Initializes the iso surface.
Definition: IsoSurfaceBuilder.cpp:37
Standard 2-dimensional vector.
Definition: ParaVector2.h:16
building triangles from 3d grid data.
Definition: IsoSurfaceBuilder.h:11
DataGrid * getDataGrid()
Returns the pointer to the data grid.
Definition: IsoSurfaceBuilder.h:49
Normals are calculated by interpolating the gradient in the data grid.
Definition: IsoSurfaceBuilder.h:33
virtual void createGridCellIsoVertices()
Creates and initializes the iso vertex index arrays of all grid cells.
Definition: IsoSurfaceBuilder.cpp:181
void setNormalType(NormalType normalType)
Sets the method used for normal generation.
Definition: IsoSurfaceBuilder.h:64
void addIsoTriangle(const IsoTriangle &isoTriangle)
...
Definition: IsoSurfaceBuilder.cpp:283
virtual int getNumIsoVertices()
Returns the total number of iso vertices to be allocated.
Definition: IsoSurfaceBuilder.cpp:80
Normals are calculated as an average of face normals.
Definition: IsoSurfaceBuilder.h:31
float mIsoValue
Iso value of the surface, the default is 1.0.
Definition: IsoSurfaceBuilder.h:116
asset_ptr< DataGrid > DataGridPtr
Reference-counted shared pointer to a DataGrid.
Definition: DataGrid.h:161
int isoVertexGroupOffsets[3]
Array with offsets to the different iso vertex groups.
Definition: IsoSurfaceBuilder.h:69
virtual ~IsoSurfaceBuilder()
Virtual Destructor.
Definition: IsoSurfaceBuilder.cpp:25
Generate vertex normals by interpolating the gradient stored in the data grid.
Definition: IsoSurfaceBuilder.h:19
float getIsoValue() const
Returns the iso value of the surface.
Definition: IsoSurfaceBuilder.h:51
Vector2 * mIsoVertexTexCoords
Texture coordinates for all iso vertices.
Definition: IsoSurfaceBuilder.h:145
GridCell * mGridCells
Array of grid cells.
Definition: IsoSurfaceBuilder.h:147
int mSurfaceFlags
Flags describing what data is generated for rendering the iso surface (see IsoSurface::SurfaceFlags)...
Definition: IsoSurfaceBuilder.h:114
virtual void buildIsoSurface()
Builds the iso surface by looping through all grid cells generating triangles.
Definition: IsoSurfaceBuilder.cpp:227
static const int msTriangleTable[256][16]
...
Definition: IsoSurfaceBuilder.h:160
void destroyGridCells()
Destroys the grid cells, including their iso vertex index arrays.
Definition: IsoSurfaceBuilder.cpp:162
Definition of a triangle in an iso surface.
Definition: IsoSurfaceBuilder.h:81
int vertices[3]
Iso vertex indices defining the triangle.
Definition: IsoSurfaceBuilder.h:84
NormalType mNormalType
The method used for normal generation.
Definition: IsoSurfaceBuilder.h:120
Normals are calculated as a weighted average of face normals.
Definition: IsoSurfaceBuilder.h:29
int * mIsoVertexIndices
Hardware vertex buffer indices for all iso vertices.
Definition: IsoSurfaceBuilder.h:126
Definition: ParaColor.h:275
Generate vertex colours by interpolating the colours stored in the data grid.
Definition: IsoSurfaceBuilder.h:21
int useIsoVertex(int isoVertex, int corner0, int corner1)
Calculates properties of the iso vertex.
Definition: IsoSurfaceBuilder.cpp:313
bool mFlipNormals
Flip normals of the surface, the default is false.
Definition: IsoSurfaceBuilder.h:118
Vector3 * mIsoVertexPositions
Positions of all iso vertices.
Definition: IsoSurfaceBuilder.h:130
NormalType
Definition: IsoSurfaceBuilder.h:26
static const int msEdgeTable[256]
...
Definition: IsoSurfaceBuilder.h:158
void update(IsoSurfaceRenderable *isr)
Rebuilds the iso surface, and updates the IsoSurfaceRenderable.
Definition: IsoSurfaceBuilder.cpp:61