VTK
dox/VolumeRendering/vtkHAVSVolumeMapper.h
Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003 Program:   Visualization Toolkit
00004 Module:    vtkHAVSVolumeMapper.h
00005 
00006 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
00007 All rights reserved.
00008 See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
00009 
00010 This software is distributed WITHOUT ANY WARRANTY; without even
00011 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
00012 PURPOSE.  See the above copyright notice for more information.
00013 
00014 =========================================================================*/
00015 
00016 /* Copyright 2005, 2006 by University of Utah. */
00017 
00119 #ifndef __vtkHAVSVolumeMapper_h
00120 #define __vtkHAVSVolumeMapper_h
00121 
00122 #include "vtkUnstructuredGridVolumeMapper.h"
00123 
00124 #define VTK_KBUFFER_SIZE_2 0
00125 #define VTK_KBUFFER_SIZE_6 1
00126 #define VTK_FIELD_LEVEL_OF_DETAIL 0
00127 #define VTK_AREA_LEVEL_OF_DETAIL 1
00128 
00129 
00130 class vtkUnstructuredGrid;
00131 class vtkDepthRadixSortUnstructuredGrid;
00132 class vtkHAVSSortedFace;
00133 
00134 class VTK_VOLUMERENDERING_EXPORT vtkHAVSVolumeMapper : public vtkUnstructuredGridVolumeMapper 
00135 {
00136 public:
00137   static vtkHAVSVolumeMapper *New();
00138   vtkTypeMacro(vtkHAVSVolumeMapper,
00139                        vtkUnstructuredGridVolumeMapper);
00140   virtual void PrintSelf(ostream& os, vtkIndent indent);
00141 
00143 
00144   vtkSetMacro(PartiallyRemoveNonConvexities, bool);
00145   vtkGetMacro(PartiallyRemoveNonConvexities, bool);
00147 
00149 
00151   vtkSetMacro(LevelOfDetailTargetTime, float);
00152   vtkGetMacro(LevelOfDetailTargetTime, float);
00154 
00156 
00157   vtkSetMacro(LevelOfDetail, bool);
00158   vtkGetMacro(LevelOfDetail, bool);
00160 
00162 
00163   void SetLevelOfDetailMethod(int);
00164   vtkGetMacro(LevelOfDetailMethod, int);
00165   void SetLevelOfDetailMethodField()
00166   {this->SetLevelOfDetailMethod(VTK_FIELD_LEVEL_OF_DETAIL);}
00167   void SetLevelOfDetailMethodArea()
00168   {this->SetLevelOfDetailMethod(VTK_AREA_LEVEL_OF_DETAIL);}
00170 
00172 
00173   vtkSetMacro(KBufferSize,int);
00174   vtkGetMacro(KBufferSize,int);
00175   void SetKBufferSizeTo2() 
00176   {this->SetKBufferSize(VTK_KBUFFER_SIZE_2);}
00177   void SetKBufferSizeTo6() 
00178   {this->SetKBufferSize(VTK_KBUFFER_SIZE_6);}
00180 
00182 
00186   virtual bool SupportedByHardware(vtkRenderer *vtkNotUsed(r))
00187     {return false; }
00189 
00191 
00193   virtual void SetGPUDataStructures(bool) = 0;
00194   vtkGetMacro(GPUDataStructures, bool);
00196   
00197 protected:  
00198   vtkHAVSVolumeMapper();
00199   ~vtkHAVSVolumeMapper();
00200 
00201 //BTX
00202   virtual void Initialize(vtkRenderer *ren, vtkVolume *vol) = 0;
00203   void InitializePrimitives(vtkVolume *vol);
00204   void InitializeScalars();
00205   void InitializeLevelOfDetail();
00206   void InitializeLookupTables(vtkVolume *vol);
00207 
00208   void FRadixSort(vtkHAVSSortedFace *array, vtkHAVSSortedFace *temp, int lo, int up);
00209   void FRadix(int byte, int len, vtkHAVSSortedFace *source, vtkHAVSSortedFace *dest, int *count);
00210 
00211   void UpdateLevelOfDetail(float targetTime);
00212   void PartialVisibilitySort(float *eye);
00213   bool CheckInitializationError();
00214 
00215   enum
00216   {
00217     NO_INIT_ERROR=0,
00218     NON_TETRAHEDRA=1,
00219     UNSUPPORTED_EXTENSIONS=2,
00220     NO_SCALARS=3,
00221     CELL_DATA=4,
00222     NO_CELLS=5
00223   };
00224 
00225   // Mesh
00226   float *Vertices;
00227   float *Scalars;
00228   double ScalarRange[2];
00229   unsigned int *Triangles;
00230   unsigned int *OrderedTriangles;
00231   vtkHAVSSortedFace *SortedFaces;
00232   vtkHAVSSortedFace *RadixTemp;
00233   float *Centers;
00234   unsigned int NumberOfVertices;
00235   unsigned int NumberOfCells;
00236   unsigned int NumberOfScalars;
00237   unsigned int NumberOfTriangles;
00238 
00239   // Level-Of-Detail
00240   unsigned int NumberOfBoundaryTriangles;
00241   unsigned int NumberOfInternalTriangles;
00242   unsigned int *BoundaryTriangles;
00243   unsigned int *InternalTriangles;
00244   unsigned int LevelOfDetailTriangleCount;
00245   float CurrentLevelOfDetail;
00246   float LevelOfDetailTargetTime;
00247   bool LevelOfDetail;
00248   int LevelOfDetailMethod;
00249 
00250   // K-Buffer
00251   int KBufferState;
00252   float MaxEdgeLength;
00253   float LevelOfDetailMaxEdgeLength;
00254   float UnitDistance;
00255   bool GPUDataStructures;
00256   float Diagonal;
00257   bool PartiallyRemoveNonConvexities;
00258   int KBufferSize;
00259 
00260   // Lookup Tables
00261   float *TransferFunction;
00262   int TransferFunctionSize;
00263 
00264   // State and Timing Stats
00265   bool Initialized;
00266   int InitializationError;
00267   int FrameNumber;
00268   float TotalRenderTime;
00269   vtkTimeStamp ColorTransferFunctionMTime;
00270   vtkTimeStamp AlphaTransferFunctionMTime;
00271   vtkTimeStamp UnstructuredGridMTime;
00272   vtkTimeStamp ScalarsMTime;
00273   vtkVolume *LastVolume;
00274 //ETX
00275 
00276 private:
00277   vtkHAVSVolumeMapper(const vtkHAVSVolumeMapper&);  // Not implemented.
00278   void operator=(const vtkHAVSVolumeMapper&);  // Not implemented.
00279 };
00280 #endif