VTK  9.1.0
vtkGPUVolumeRayCastMapper.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkGPUVolumeRayCastMapper.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 =========================================================================*/
30 #ifndef vtkGPUVolumeRayCastMapper_h
31 #define vtkGPUVolumeRayCastMapper_h
32 #include <unordered_map> // For std::unordered_map
33 #include <vector> // For std::vector
34 
35 #include "vtkRenderingVolumeModule.h" // For export macro
36 #include "vtkVolumeMapper.h"
37 
38 class vtkContourValues;
39 class vtkRenderWindow;
40 class vtkVolumeProperty;
41 
42 class VTKRENDERINGVOLUME_EXPORT vtkGPUVolumeRayCastMapper : public vtkVolumeMapper
43 {
44 public:
47  void PrintSelf(ostream& os, vtkIndent indent) override;
48 
50 
56  vtkSetClampMacro(AutoAdjustSampleDistances, vtkTypeBool, 0, 1);
57  vtkGetMacro(AutoAdjustSampleDistances, vtkTypeBool);
58  vtkBooleanMacro(AutoAdjustSampleDistances, vtkTypeBool);
60 
62 
67  vtkSetClampMacro(LockSampleDistanceToInputSpacing, vtkTypeBool, 0, 1);
68  vtkGetMacro(LockSampleDistanceToInputSpacing, vtkTypeBool);
69  vtkBooleanMacro(LockSampleDistanceToInputSpacing, vtkTypeBool);
71 
73 
78  vtkSetClampMacro(UseJittering, vtkTypeBool, 0, 1);
79  vtkGetMacro(UseJittering, vtkTypeBool);
80  vtkBooleanMacro(UseJittering, vtkTypeBool);
82 
84 
92  vtkSetClampMacro(UseDepthPass, vtkTypeBool, 0, 1);
93  vtkGetMacro(UseDepthPass, vtkTypeBool);
94  vtkBooleanMacro(UseDepthPass, vtkTypeBool);
96 
103 
105 
111  vtkSetMacro(SampleDistance, float);
112  vtkGetMacro(SampleDistance, float);
114 
116 
123  vtkSetClampMacro(ImageSampleDistance, float, 0.1f, 100.0f);
124  vtkGetMacro(ImageSampleDistance, float);
126 
128 
132  vtkSetClampMacro(MinimumImageSampleDistance, float, 0.1f, 100.0f);
133  vtkGetMacro(MinimumImageSampleDistance, float);
135 
137 
141  vtkSetClampMacro(MaximumImageSampleDistance, float, 0.1f, 100.0f);
142  vtkGetMacro(MaximumImageSampleDistance, float);
144 
146 
159  vtkSetMacro(FinalColorWindow, float);
160  vtkGetMacro(FinalColorWindow, float);
161  vtkSetMacro(FinalColorLevel, float);
162  vtkGetMacro(FinalColorLevel, float);
164 
166 
171  vtkSetMacro(MaxMemoryInBytes, vtkIdType);
172  vtkGetMacro(MaxMemoryInBytes, vtkIdType);
174 
176 
181  vtkSetClampMacro(MaxMemoryFraction, float, 0.1f, 1.0f);
182  vtkGetMacro(MaxMemoryFraction, float);
184 
186 
194  vtkSetMacro(ReportProgress, bool);
195  vtkGetMacro(ReportProgress, bool);
197 
204  virtual int IsRenderSupported(
205  vtkRenderWindow* vtkNotUsed(window), vtkVolumeProperty* vtkNotUsed(property))
206  {
207  return 0;
208  }
209 
210  void CreateCanonicalView(vtkRenderer* ren, vtkVolume* volume, vtkImageData* image, int blend_mode,
211  double viewDirection[3], double viewUp[3]);
212 
214 
235  vtkGetObjectMacro(MaskInput, vtkImageData);
237 
238  enum
239  {
240  BinaryMaskType = 0,
241  LabelMapMaskType
242  };
243 
245 
249  vtkSetMacro(MaskType, int);
250  vtkGetMacro(MaskType, int);
254 
256 
264  vtkSetClampMacro(MaskBlendFactor, float, 0.0f, 1.0f);
265  vtkGetMacro(MaskBlendFactor, float);
267 
269 
283  vtkSetMacro(RenderToImage, vtkTypeBool);
284  vtkGetMacro(RenderToImage, vtkTypeBool);
285  vtkBooleanMacro(RenderToImage, vtkTypeBool);
287 
289 
294  vtkSetMacro(DepthImageScalarType, int);
295  vtkGetMacro(DepthImageScalarType, int);
300 
302 
313  vtkSetMacro(ClampDepthToBackface, vtkTypeBool);
314  vtkGetMacro(ClampDepthToBackface, vtkTypeBool);
315  vtkBooleanMacro(ClampDepthToBackface, vtkTypeBool);
317 
324  virtual void GetDepthImage(vtkImageData*) {}
325 
332  virtual void GetColorImage(vtkImageData*) {}
333 
338  void Render(vtkRenderer*, vtkVolume*) override;
339 
344  virtual void GPURender(vtkRenderer*, vtkVolume*) {}
345 
353 
366  virtual void GetReductionRatio(double ratio[3]) = 0;
367 
369  {
370  SCALAR = 0, // default
371  NATIVE
372  };
373 
375 
391  vtkSetMacro(ColorRangeType, int);
392  vtkGetMacro(ColorRangeType, int);
393  vtkSetMacro(ScalarOpacityRangeType, int);
394  vtkGetMacro(ScalarOpacityRangeType, int);
395  vtkSetMacro(GradientOpacityRangeType, int);
396  vtkGetMacro(GradientOpacityRangeType, int);
398 
399  vtkDataSet* GetInput() override { return this->GetInput(0); };
400 
402 
406  void RemoveInputConnection(int port, vtkAlgorithmOutput* input) override;
407  void RemoveInputConnection(int port, int idx) override;
408  void SetInputConnection(int port, vtkAlgorithmOutput* input) override;
410  {
411  this->SetInputConnection(0, input);
412  }
414 
419 
421 
422  double* GetBoundsFromPort(const int port) VTK_SIZEHINT(6);
423 
425 
428  vtkSetStringMacro(Transfer2DYAxisArray);
429  vtkGetStringMacro(Transfer2DYAxisArray);
431 
432 protected:
435 
445 
457  void TransformInput(const int port);
458 
460 
471  int ValidateInput(vtkVolumeProperty* property, const int port);
473 
475 
479  void CloneInputs();
480  void CloneInput(vtkDataSet* input, const int port);
482 
483  // Special version of render called during the creation
484  // of a canonical view.
486 
487  // Methods called by the AMR Volume Mapper.
488  virtual void PreRender(vtkRenderer* ren, vtkVolume* vol, double datasetBounds[6],
489  double scalarRange[2], int numberOfScalarComponents, unsigned int numberOfLevels) = 0;
490 
491  // \pre input is up-to-date
492  virtual void RenderBlock(vtkRenderer* ren, vtkVolume* vol, unsigned int level) = 0;
493 
494  virtual void PostRender(vtkRenderer* ren, int numberOfScalarComponents) = 0;
495  vtkDataSet* GetInput(const int port) override;
496 
502  void SetCellFlag(int cellFlag);
503  void RemovePortInternal(const int port);
504 
510 
511  // Render to texture mode flag
513 
514  // Depth image scalar type
516 
517  // Clamp depth values to the depth of the face at which the ray
518  // exits the volume
520 
521  // Enable / disable stochastic jittering
523 
524  // Enable / disable two pass rendering
527 
528  // The distance between sample points along the ray
530 
534 
537 
538  // 1 if we are generating the canonical image, 0 otherwise
541 
543 
547  vtkSetClampMacro(AMRMode, vtkTypeBool, 0, 1);
548  vtkGetMacro(AMRMode, vtkTypeBool);
549  vtkBooleanMacro(AMRMode, vtkTypeBool);
551 
554  int MaskType;
555 
557 
558  // Transfer function range type
562 
563  // Point data or cell data (or field data, not handled) ?
564  int CellFlag;
565 
578  virtual void ClipCroppingRegionPlanes();
579 
580  using DataMap = std::unordered_map<int, vtkDataSet*>;
582  vtkDataSet* FindData(int port, DataMap& container);
583 
584  double ClippedCroppingRegionPlanes[6];
585 
588 
590  std::vector<int> Ports;
591  std::vector<int> RemovedPorts;
593 
599 
606 
607 private:
609  void operator=(const vtkGPUVolumeRayCastMapper&) = delete;
610 };
611 
612 #endif
Proxy object to connect input/output ports.
virtual void SetInputConnection(int port, vtkAlgorithmOutput *input)
Set the connection for the given input port index.
helper object to manage setting and generating contour values
abstract class to specify dataset behavior
Definition: vtkDataSet.h:57
Ray casting performed on the GPU.
virtual void GetDepthImage(vtkImageData *)
Low level API to export the depth texture as vtkImageData in RenderToImage mode.
virtual int IsRenderSupported(vtkRenderWindow *vtkNotUsed(window), vtkVolumeProperty *vtkNotUsed(property))
Based on hardware and properties, we may or may not be able to render using 3D texture mapping.
void CloneInputs()
Shallow-copy the inputs into a transform-adjusted clone.
void SetMaskTypeToLabelMap()
Set the mask type, if mask is to be used.
void RemoveInputConnection(int port, int idx) override
Add/Remove input connections.
void SetTransformedInput(vtkDataSet *)
void SetDepthImageScalarTypeToFloat()
Set/Get the scalar type of the depth texture in RenderToImage mode.
virtual void GPURender(vtkRenderer *, vtkVolume *)
Handled in the subclass - the actual render method.
char * Transfer2DYAxisArray
Define the array used for the Y axis of transfer 2D.
int ValidateRender(vtkRenderer *, vtkVolume *)
This method is used by the Render() method to validate everything before attempting to render.
virtual void GetColorImage(vtkImageData *)
Low level API to export the color texture as vtkImageData in RenderToImage mode.
double * GetBoundsFromPort(const int port)
void SetInputConnection(vtkAlgorithmOutput *input) override
Add/Remove input connections.
void SetDepthImageScalarTypeToUnsignedShort()
Set/Get the scalar type of the depth texture in RenderToImage mode.
void SetMaskInput(vtkImageData *mask)
Optionally, set a mask input.
~vtkGPUVolumeRayCastMapper() override
virtual void GetReductionRatio(double ratio[3])=0
Return how much the dataset has to be reduced in each dimension to fit on the GPU.
void RemovePortInternal(const int port)
DataMap LastInputs
This is needed only to check if the input data has been changed since the last Render() call.
void CreateCanonicalView(vtkRenderer *ren, vtkVolume *volume, vtkImageData *image, int blend_mode, double viewDirection[3], double viewUp[3])
void SetDepthImageScalarTypeToUnsignedChar()
Set/Get the scalar type of the depth texture in RenderToImage mode.
int ValidateInputs()
This method is used by the Render() method to validate everything before attempting to render.
vtkContourValues * GetDepthPassContourValues()
Return handle to contour values container so that values can be set by the application.
std::unordered_map< int, vtkDataSet * > DataMap
int ValidateInput(vtkVolumeProperty *property, const int port)
This method is used by the Render() method to validate everything before attempting to render.
void ReleaseGraphicsResources(vtkWindow *) override
Release any graphics resources that are being consumed by this mapper.
void Render(vtkRenderer *, vtkVolume *) override
Initialize rendering for this volume.
void TransformInput(const int port)
A transformation is applied (translation) to the input.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
void RemoveInputConnection(int port, vtkAlgorithmOutput *input) override
Add/Remove input connections.
virtual void PreRender(vtkRenderer *ren, vtkVolume *vol, double datasetBounds[6], double scalarRange[2], int numberOfScalarComponents, unsigned int numberOfLevels)=0
vtkDataSet * FindData(int port, DataMap &container)
static vtkGPUVolumeRayCastMapper * New()
vtkDataSet * GetTransformedInput(const int port=0)
virtual void RenderBlock(vtkRenderer *ren, vtkVolume *vol, unsigned int level)=0
void SetInputConnection(int port, vtkAlgorithmOutput *input) override
Add/Remove input connections.
int GetInputCount()
Number of currently active ports.
vtkDataSet * GetInput() override
Set/Get the input data.
virtual void ClipCroppingRegionPlanes()
Compute the cropping planes clipped by the bounds of the volume.
int FillInputPortInformation(int port, vtkInformation *info) override
Handle inputs.
void SetMaskTypeToBinary()
Set the mask type, if mask is to be used.
vtkDataSet * GetInput(const int port) override
Set/Get the input data.
void CloneInput(vtkDataSet *input, const int port)
Shallow-copy the inputs into a transform-adjusted clone.
virtual void PostRender(vtkRenderer *ren, int numberOfScalarComponents)=0
void SetCellFlag(int cellFlag)
Called by the AMR Volume Mapper.
void CanonicalViewRender(vtkRenderer *, vtkVolume *)
topologically and geometrically regular array of data
Definition: vtkImageData.h:48
a simple class to control print indentation
Definition: vtkIndent.h:34
Store vtkAlgorithm input/output information.
create a window for renderers to draw into
abstract specification for renderers
Definition: vtkRenderer.h:64
Abstract class for a volume mapper.
represents the common properties for rendering a volume.
represents a volume (data & properties) in a rendered scene
Definition: vtkVolume.h:45
window superclass for vtkRenderWindow
Definition: vtkWindow.h:36
@ info
Definition: vtkX3D.h:382
@ level
Definition: vtkX3D.h:401
@ port
Definition: vtkX3D.h:453
@ image
Definition: vtkX3D.h:380
int vtkTypeBool
Definition: vtkABI.h:69
int vtkIdType
Definition: vtkType.h:332
#define VTK_SIZEHINT(...)