VTK
vtkHAVSVolumeMapper.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3 Program: Visualization Toolkit
4 Module: vtkHAVSVolumeMapper.h
5 
6 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7 All rights reserved.
8 See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10 This software is distributed WITHOUT ANY WARRANTY; without even
11 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12 PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
15 
16 /* Copyright 2005, 2006 by University of Utah. */
17 
117 #ifndef vtkHAVSVolumeMapper_h
118 #define vtkHAVSVolumeMapper_h
119 
120 #include "vtkRenderingVolumeModule.h" // For export macro
122 
123 #define VTK_KBUFFER_SIZE_2 0
124 #define VTK_KBUFFER_SIZE_6 1
125 #define VTK_FIELD_LEVEL_OF_DETAIL 0
126 #define VTK_AREA_LEVEL_OF_DETAIL 1
127 
128 
129 class vtkUnstructuredGrid;
130 class vtkDepthRadixSortUnstructuredGrid;
131 class vtkHAVSSortedFace;
132 
133 class VTKRENDERINGVOLUME_EXPORT vtkHAVSVolumeMapper : public vtkUnstructuredGridVolumeMapper
134 {
135 public:
136  static vtkHAVSVolumeMapper *New();
137  vtkTypeMacro(vtkHAVSVolumeMapper,
139  void PrintSelf(ostream& os, vtkIndent indent) VTK_OVERRIDE;
140 
142 
145  vtkSetMacro(PartiallyRemoveNonConvexities, bool);
146  vtkGetMacro(PartiallyRemoveNonConvexities, bool);
148 
150 
153  vtkSetMacro(LevelOfDetailTargetTime, float);
154  vtkGetMacro(LevelOfDetailTargetTime, float);
156 
158 
161  vtkSetMacro(LevelOfDetail, bool);
162  vtkGetMacro(LevelOfDetail, bool);
164 
166 
169  void SetLevelOfDetailMethod(int);
170  vtkGetMacro(LevelOfDetailMethod, int);
172  {this->SetLevelOfDetailMethod(VTK_FIELD_LEVEL_OF_DETAIL);}
174  {this->SetLevelOfDetailMethod(VTK_AREA_LEVEL_OF_DETAIL);}
176 
178 
181  vtkSetMacro(KBufferSize,int);
182  vtkGetMacro(KBufferSize,int);
184  {this->SetKBufferSize(VTK_KBUFFER_SIZE_2);}
186  {this->SetKBufferSize(VTK_KBUFFER_SIZE_6);}
188 
195  virtual bool SupportedByHardware(vtkRenderer *vtkNotUsed(r))
196  {return false; }
197 
199 
203  virtual void SetGPUDataStructures(bool) = 0;
204  vtkGetMacro(GPUDataStructures, bool);
206 
207 protected:
209  ~vtkHAVSVolumeMapper() VTK_OVERRIDE;
210 
211  virtual void Initialize(vtkRenderer *ren, vtkVolume *vol) = 0;
212  void InitializePrimitives(vtkVolume *vol);
213  void InitializeScalars();
214  void InitializeLevelOfDetail();
215  void InitializeLookupTables(vtkVolume *vol);
216 
217  void FRadixSort(vtkHAVSSortedFace *array, vtkHAVSSortedFace *temp, int lo, int up);
218  void FRadix(int byte, int len, vtkHAVSSortedFace *source, vtkHAVSSortedFace *dest, int *count);
219 
220  void UpdateLevelOfDetail(float targetTime);
221  void PartialVisibilitySort(float *eye);
222  bool CheckInitializationError();
223 
224  enum
225  {
226  NO_INIT_ERROR=0,
227  NON_TETRAHEDRA=1,
228  UNSUPPORTED_EXTENSIONS=2,
229  NO_SCALARS=3,
230  CELL_DATA=4,
231  NO_CELLS=5
232  };
233 
234  // Mesh
235  float *Vertices;
236  float *Scalars;
237  double ScalarRange[2];
238  unsigned int *Triangles;
239  unsigned int *OrderedTriangles;
240  vtkHAVSSortedFace *SortedFaces;
241  vtkHAVSSortedFace *RadixTemp;
242  float *Centers;
243  unsigned int NumberOfVertices;
244  unsigned int NumberOfCells;
245  unsigned int NumberOfScalars;
246  unsigned int NumberOfTriangles;
247 
248  // Level-Of-Detail
251  unsigned int *BoundaryTriangles;
252  unsigned int *InternalTriangles;
258 
259  // K-Buffer
265  float Diagonal;
268 
269  // Lookup Tables
272 
273  // State and Timing Stats
283 
284 private:
285  vtkHAVSVolumeMapper(const vtkHAVSVolumeMapper&) VTK_DELETE_FUNCTION;
286  void operator=(const vtkHAVSVolumeMapper&) VTK_DELETE_FUNCTION;
287 };
288 #endif
vtkTimeStamp ColorTransferFunctionMTime
unsigned int * InternalTriangles
#define VTK_KBUFFER_SIZE_2
represents a volume (data & properties) in a rendered scene
Definition: vtkVolume.h:44
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
record modification and/or execution time
Definition: vtkTimeStamp.h:32
void SetLevelOfDetailMethodArea()
Set/get the current level-of-detail method.
virtual bool SupportedByHardware(vtkRenderer *vtkNotUsed(r))
Check hardware support for the HAVS algorithm.
unsigned int NumberOfBoundaryTriangles
abstract specification for renderers
Definition: vtkRenderer.h:57
void SetLevelOfDetailMethodField()
Set/get the current level-of-detail method.
#define VTK_FIELD_LEVEL_OF_DETAIL
unsigned int NumberOfInternalTriangles
a simple class to control print indentation
Definition: vtkIndent.h:33
Abstract class for a unstructured grid volume mapper.
#define VTK_AREA_LEVEL_OF_DETAIL
#define VTK_KBUFFER_SIZE_6
dataset represents arbitrary combinations of all possible cell types
vtkTimeStamp AlphaTransferFunctionMTime
unsigned int * OrderedTriangles
vtkSetMacro(IgnoreDriverBugs, bool)
When set known driver bugs are ignored during driver feature detection.
void SetKBufferSizeTo2()
Set the kbuffer size.
boost::graph_traits< vtkGraph *>::vertex_descriptor source(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)
vtkHAVSSortedFace * SortedFaces
static vtkAlgorithm * New()
vtkHAVSSortedFace * RadixTemp
unsigned int * BoundaryTriangles
unsigned int LevelOfDetailTriangleCount
vtkTimeStamp UnstructuredGridMTime
void SetKBufferSizeTo6()
Set the kbuffer size.
Hardware-Assisted Visibility Sorting unstructured grid mapper.
unsigned int NumberOfTriangles