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 
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 
132 class vtkUnstructuredGrid;
133 class vtkDepthRadixSortUnstructuredGrid;
134 class vtkHAVSSortedFace;
135 
136 class VTKRENDERINGVOLUME_EXPORT vtkHAVSVolumeMapper : public vtkUnstructuredGridVolumeMapper
137 {
138 public:
139  static vtkHAVSVolumeMapper *New();
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 
172  void SetLevelOfDetailMethod(int);
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 
210 protected:
213 
214  virtual void Initialize(vtkRenderer *ren, vtkVolume *vol) = 0;
215  void InitializePrimitives(vtkVolume *vol);
216  void InitializeScalars();
217  void InitializeLevelOfDetail();
218  void InitializeLookupTables(vtkVolume *vol);
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);
225  bool CheckInitializationError();
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 
287 private:
288  vtkHAVSVolumeMapper(const vtkHAVSVolumeMapper&) VTK_DELETE_FUNCTION;
289  void operator=(const vtkHAVSVolumeMapper&) VTK_DELETE_FUNCTION;
290 };
291 #endif
vtkHAVSVolumeMapper::NumberOfVertices
unsigned int NumberOfVertices
Definition: vtkHAVSVolumeMapper.h:246
vtkHAVSVolumeMapper::TotalRenderTime
float TotalRenderTime
Definition: vtkHAVSVolumeMapper.h:280
vtkHAVSVolumeMapper::Initialized
bool Initialized
Definition: vtkHAVSVolumeMapper.h:277
vtkHAVSVolumeMapper::Vertices
float * Vertices
Definition: vtkHAVSVolumeMapper.h:238
vtkHAVSVolumeMapper::MaxEdgeLength
float MaxEdgeLength
Definition: vtkHAVSVolumeMapper.h:264
vtkVolume
represents a volume (data & properties) in a rendered scene
Definition: vtkVolume.h:50
VTK_KBUFFER_SIZE_2
#define VTK_KBUFFER_SIZE_2
Definition: vtkHAVSVolumeMapper.h:126
vtkHAVSVolumeMapper::KBufferState
int KBufferState
Definition: vtkHAVSVolumeMapper.h:263
vtkHAVSVolumeMapper::LevelOfDetail
bool LevelOfDetail
Definition: vtkHAVSVolumeMapper.h:259
vtkHAVSVolumeMapper::InternalTriangles
unsigned int * InternalTriangles
Definition: vtkHAVSVolumeMapper.h:255
vtkHAVSVolumeMapper::UnitDistance
float UnitDistance
Definition: vtkHAVSVolumeMapper.h:266
vtkTimeStamp
record modification and/or execution time
Definition: vtkTimeStamp.h:35
VTK_FIELD_LEVEL_OF_DETAIL
#define VTK_FIELD_LEVEL_OF_DETAIL
Definition: vtkHAVSVolumeMapper.h:128
vtkHAVSVolumeMapper::Centers
float * Centers
Definition: vtkHAVSVolumeMapper.h:245
vtkHAVSVolumeMapper::Scalars
float * Scalars
Definition: vtkHAVSVolumeMapper.h:239
vtkHAVSVolumeMapper::FrameNumber
int FrameNumber
Definition: vtkHAVSVolumeMapper.h:279
vtkHAVSVolumeMapper::TransferFunction
float * TransferFunction
Definition: vtkHAVSVolumeMapper.h:273
vtkHAVSVolumeMapper::SetLevelOfDetailMethodArea
void SetLevelOfDetailMethodArea()
Definition: vtkHAVSVolumeMapper.h:176
vtkHAVSVolumeMapper::LevelOfDetailMethod
int LevelOfDetailMethod
Definition: vtkHAVSVolumeMapper.h:260
vtkHAVSVolumeMapper::Diagonal
float Diagonal
Definition: vtkHAVSVolumeMapper.h:268
vtkHAVSVolumeMapper::TransferFunctionSize
int TransferFunctionSize
Definition: vtkHAVSVolumeMapper.h:274
source
boost::graph_traits< vtkGraph * >::vertex_descriptor source(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)
Definition: vtkBoostGraphAdapter.h:822
vtkHAVSVolumeMapper::UnstructuredGridMTime
vtkTimeStamp UnstructuredGridMTime
Definition: vtkHAVSVolumeMapper.h:283
vtkHAVSVolumeMapper::LevelOfDetailTriangleCount
unsigned int LevelOfDetailTriangleCount
Definition: vtkHAVSVolumeMapper.h:256
vtkHAVSVolumeMapper::GPUDataStructures
bool GPUDataStructures
Definition: vtkHAVSVolumeMapper.h:267
vtkHAVSVolumeMapper::LastVolume
vtkVolume * LastVolume
Definition: vtkHAVSVolumeMapper.h:285
vtkHAVSVolumeMapper::NumberOfInternalTriangles
unsigned int NumberOfInternalTriangles
Definition: vtkHAVSVolumeMapper.h:253
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:39
vtkHAVSVolumeMapper::OrderedTriangles
unsigned int * OrderedTriangles
Definition: vtkHAVSVolumeMapper.h:242
VTK_KBUFFER_SIZE_6
#define VTK_KBUFFER_SIZE_6
Definition: vtkHAVSVolumeMapper.h:127
vtkHAVSVolumeMapper::CurrentLevelOfDetail
float CurrentLevelOfDetail
Definition: vtkHAVSVolumeMapper.h:257
VTK_AREA_LEVEL_OF_DETAIL
#define VTK_AREA_LEVEL_OF_DETAIL
Definition: vtkHAVSVolumeMapper.h:129
vtkHAVSVolumeMapper::Triangles
unsigned int * Triangles
Definition: vtkHAVSVolumeMapper.h:241
vtkHAVSVolumeMapper::NumberOfBoundaryTriangles
unsigned int NumberOfBoundaryTriangles
Definition: vtkHAVSVolumeMapper.h:252
vtkHAVSVolumeMapper::KBufferSize
int KBufferSize
Definition: vtkHAVSVolumeMapper.h:270
vtkHAVSVolumeMapper::LevelOfDetailTargetTime
float LevelOfDetailTargetTime
Definition: vtkHAVSVolumeMapper.h:258
vtkHAVSVolumeMapper::AlphaTransferFunctionMTime
vtkTimeStamp AlphaTransferFunctionMTime
Definition: vtkHAVSVolumeMapper.h:282
vtkUnstructuredGridVolumeMapper::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent)
Methods invoked by print to print information about the object including superclasses.
vtkSetMacro
vtkSetMacro(IgnoreDriverBugs, bool)
Updates the extensions string.
vtkAlgorithm::New
static vtkAlgorithm * New()
vtkHAVSVolumeMapper::RadixTemp
vtkHAVSSortedFace * RadixTemp
Definition: vtkHAVSVolumeMapper.h:244
vtkUnstructuredGridVolumeMapper
Abstract class for a unstructured grid volume mapper.
Definition: vtkUnstructuredGridVolumeMapper.h:40
vtkRenderer
abstract specification for renderers
Definition: vtkRenderer.h:63
vtkHAVSVolumeMapper::InitializationError
int InitializationError
Definition: vtkHAVSVolumeMapper.h:278
vtkHAVSVolumeMapper::SetKBufferSizeTo2
void SetKBufferSizeTo2()
Definition: vtkHAVSVolumeMapper.h:186
vtkHAVSVolumeMapper::NumberOfCells
unsigned int NumberOfCells
Definition: vtkHAVSVolumeMapper.h:247
vtkUnstructuredGrid
dataset represents arbitrary combinations of all possible cell types
Definition: vtkUnstructuredGrid.h:81
vtkHAVSVolumeMapper::ScalarsMTime
vtkTimeStamp ScalarsMTime
Definition: vtkHAVSVolumeMapper.h:284
vtkHAVSVolumeMapper
Hardware-Assisted Visibility Sorting unstructured grid mapper.
Definition: vtkHAVSVolumeMapper.h:136
vtkUnstructuredGridVolumeMapper.h
vtkHAVSVolumeMapper::SortedFaces
vtkHAVSSortedFace * SortedFaces
Definition: vtkHAVSVolumeMapper.h:243
vtkHAVSVolumeMapper::NumberOfTriangles
unsigned int NumberOfTriangles
Definition: vtkHAVSVolumeMapper.h:249
vtkHAVSVolumeMapper::PartiallyRemoveNonConvexities
bool PartiallyRemoveNonConvexities
Definition: vtkHAVSVolumeMapper.h:269
vtkHAVSVolumeMapper::ColorTransferFunctionMTime
vtkTimeStamp ColorTransferFunctionMTime
Definition: vtkHAVSVolumeMapper.h:281
vtkHAVSVolumeMapper::LevelOfDetailMaxEdgeLength
float LevelOfDetailMaxEdgeLength
Definition: vtkHAVSVolumeMapper.h:265
vtkHAVSVolumeMapper::SupportedByHardware
virtual bool SupportedByHardware(vtkRenderer *vtkNotUsed(r))
Check hardware support for the HAVS algorithm.
Definition: vtkHAVSVolumeMapper.h:198
vtkHAVSVolumeMapper::NumberOfScalars
unsigned int NumberOfScalars
Definition: vtkHAVSVolumeMapper.h:248
vtkHAVSVolumeMapper::BoundaryTriangles
unsigned int * BoundaryTriangles
Definition: vtkHAVSVolumeMapper.h:254
vtkHAVSVolumeMapper::SetLevelOfDetailMethodField
void SetLevelOfDetailMethodField()
Definition: vtkHAVSVolumeMapper.h:174
vtkHAVSVolumeMapper::SetKBufferSizeTo6
void SetKBufferSizeTo6()
Definition: vtkHAVSVolumeMapper.h:188