VTK
vtkHAVSVolumeMapper.h
Go to the documentation of this file.
1/*=========================================================================
2
3Program: Visualization Toolkit
4Module: vtkHAVSVolumeMapper.h
5
6Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7All rights reserved.
8See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9
10This software is distributed WITHOUT ANY WARRANTY; without even
11the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12PURPOSE. See the above copyright notice for more information.
13
14=========================================================================*/
15
16/* Copyright 2005, 2006 by University of Utah. */
17
120#ifndef vtkHAVSVolumeMapper_h
121#define vtkHAVSVolumeMapper_h
122
123#include "vtkRenderingVolumeModule.h" // For export macro
125
126#define VTK_KBUFFER_SIZE_2 0
127#define VTK_KBUFFER_SIZE_6 1
128#define VTK_FIELD_LEVEL_OF_DETAIL 0
129#define VTK_AREA_LEVEL_OF_DETAIL 1
130
131
133class vtkDepthRadixSortUnstructuredGrid;
134class vtkHAVSSortedFace;
135
136class VTKRENDERINGVOLUME_EXPORT vtkHAVSVolumeMapper : public vtkUnstructuredGridVolumeMapper
137{
138public:
140 vtkTypeMacro(vtkHAVSVolumeMapper,
142 void PrintSelf(ostream& os, vtkIndent indent) VTK_OVERRIDE;
143
145
148 vtkSetMacro(PartiallyRemoveNonConvexities, bool);
149 vtkGetMacro(PartiallyRemoveNonConvexities, bool);
151
153
156 vtkSetMacro(LevelOfDetailTargetTime, float);
157 vtkGetMacro(LevelOfDetailTargetTime, float);
159
161
164 vtkSetMacro(LevelOfDetail, bool);
165 vtkGetMacro(LevelOfDetail, bool);
167
169
173 vtkGetMacro(LevelOfDetailMethod, int);
175 {this->SetLevelOfDetailMethod(VTK_FIELD_LEVEL_OF_DETAIL);}
177 {this->SetLevelOfDetailMethod(VTK_AREA_LEVEL_OF_DETAIL);}
179
181
184 vtkSetMacro(KBufferSize,int);
185 vtkGetMacro(KBufferSize,int);
187 {this->SetKBufferSize(VTK_KBUFFER_SIZE_2);}
189 {this->SetKBufferSize(VTK_KBUFFER_SIZE_6);}
191
198 virtual bool SupportedByHardware(vtkRenderer *vtkNotUsed(r))
199 {return false; }
200
202
206 virtual void SetGPUDataStructures(bool) = 0;
207 vtkGetMacro(GPUDataStructures, bool);
209
210protected:
213
214 virtual void Initialize(vtkRenderer *ren, vtkVolume *vol) = 0;
219
220 void FRadixSort(vtkHAVSSortedFace *array, vtkHAVSSortedFace *temp, int lo, int up);
221 void FRadix(int byte, int len, vtkHAVSSortedFace *source, vtkHAVSSortedFace *dest, int *count);
222
223 void UpdateLevelOfDetail(float targetTime);
224 void PartialVisibilitySort(float *eye);
226
227 enum
228 {
229 NO_INIT_ERROR=0,
230 NON_TETRAHEDRA=1,
231 UNSUPPORTED_EXTENSIONS=2,
232 NO_SCALARS=3,
233 CELL_DATA=4,
234 NO_CELLS=5
235 };
236
237 // Mesh
238 float *Vertices;
239 float *Scalars;
240 double ScalarRange[2];
241 unsigned int *Triangles;
242 unsigned int *OrderedTriangles;
243 vtkHAVSSortedFace *SortedFaces;
244 vtkHAVSSortedFace *RadixTemp;
245 float *Centers;
246 unsigned int NumberOfVertices;
247 unsigned int NumberOfCells;
248 unsigned int NumberOfScalars;
249 unsigned int NumberOfTriangles;
250
251 // Level-Of-Detail
254 unsigned int *BoundaryTriangles;
255 unsigned int *InternalTriangles;
261
262 // K-Buffer
268 float Diagonal;
271
272 // Lookup Tables
275
276 // State and Timing Stats
286
287private:
288 vtkHAVSVolumeMapper(const vtkHAVSVolumeMapper&) VTK_DELETE_FUNCTION;
289 void operator=(const vtkHAVSVolumeMapper&) VTK_DELETE_FUNCTION;
290};
291#endif
Hardware-Assisted Visibility Sorting unstructured grid mapper.
virtual void Initialize(vtkRenderer *ren, vtkVolume *vol)=0
vtkTimeStamp AlphaTransferFunctionMTime
bool CheckInitializationError()
void InitializeLevelOfDetail()
unsigned int NumberOfInternalTriangles
unsigned int NumberOfBoundaryTriangles
unsigned int NumberOfTriangles
virtual bool SupportedByHardware(vtkRenderer *vtkNotUsed(r))
Check hardware support for the HAVS algorithm.
static vtkHAVSVolumeMapper * New()
vtkTimeStamp UnstructuredGridMTime
unsigned int * OrderedTriangles
virtual void SetGPUDataStructures(bool)=0
Set/get whether or not the data structures should be stored on the GPU for better peformance.
vtkTimeStamp ColorTransferFunctionMTime
vtkHAVSSortedFace * RadixTemp
void UpdateLevelOfDetail(float targetTime)
void InitializeLookupTables(vtkVolume *vol)
unsigned int LevelOfDetailTriangleCount
void FRadixSort(vtkHAVSSortedFace *array, vtkHAVSSortedFace *temp, int lo, int up)
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkHAVSSortedFace * SortedFaces
void InitializePrimitives(vtkVolume *vol)
void FRadix(int byte, int len, vtkHAVSSortedFace *source, vtkHAVSSortedFace *dest, int *count)
unsigned int * InternalTriangles
void SetLevelOfDetailMethod(int)
Set/get the current level-of-detail method.
void PartialVisibilitySort(float *eye)
unsigned int * BoundaryTriangles
a simple class to control print indentation
Definition: vtkIndent.h:40
abstract specification for renderers
Definition: vtkRenderer.h:64
record modification and/or execution time
Definition: vtkTimeStamp.h:36
Abstract class for a unstructured grid volume mapper.
dataset represents arbitrary combinations of all possible cell types
represents a volume (data & properties) in a rendered scene
Definition: vtkVolume.h:51
boost::graph_traits< vtkGraph * >::vertex_descriptor source(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)
#define VTK_KBUFFER_SIZE_2
#define VTK_FIELD_LEVEL_OF_DETAIL
#define VTK_AREA_LEVEL_OF_DETAIL
#define VTK_KBUFFER_SIZE_6
vtkSetMacro(IgnoreDriverBugs, bool)
Updates the extensions string.