VTK  9.3.20240424
vtkGPUVolumeRayCastMapper.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2// SPDX-License-Identifier: BSD-3-Clause
24#ifndef vtkGPUVolumeRayCastMapper_h
25#define vtkGPUVolumeRayCastMapper_h
26#include <unordered_map> // For std::unordered_map
27#include <vector> // For std::vector
28
29#include "vtkRenderingVolumeModule.h" // For export macro
30#include "vtkVolumeMapper.h"
31
32VTK_ABI_NAMESPACE_BEGIN
34class vtkRenderWindow;
36
37class VTKRENDERINGVOLUME_EXPORT vtkGPUVolumeRayCastMapper : public vtkVolumeMapper
38{
39public:
42 void PrintSelf(ostream& os, vtkIndent indent) override;
43
45
51 vtkSetClampMacro(AutoAdjustSampleDistances, vtkTypeBool, 0, 1);
52 vtkGetMacro(AutoAdjustSampleDistances, vtkTypeBool);
53 vtkBooleanMacro(AutoAdjustSampleDistances, vtkTypeBool);
55
57
62 vtkSetClampMacro(LockSampleDistanceToInputSpacing, vtkTypeBool, 0, 1);
63 vtkGetMacro(LockSampleDistanceToInputSpacing, vtkTypeBool);
64 vtkBooleanMacro(LockSampleDistanceToInputSpacing, vtkTypeBool);
66
68
73 vtkSetClampMacro(UseJittering, vtkTypeBool, 0, 1);
74 vtkGetMacro(UseJittering, vtkTypeBool);
75 vtkBooleanMacro(UseJittering, vtkTypeBool);
77
79
87 vtkSetClampMacro(UseDepthPass, vtkTypeBool, 0, 1);
88 vtkGetMacro(UseDepthPass, vtkTypeBool);
89 vtkBooleanMacro(UseDepthPass, vtkTypeBool);
91
98
100
106 vtkSetMacro(SampleDistance, float);
107 vtkGetMacro(SampleDistance, float);
109
111
118 vtkSetClampMacro(ImageSampleDistance, float, 0.1f, 100.0f);
119 vtkGetMacro(ImageSampleDistance, float);
121
123
127 vtkSetClampMacro(MinimumImageSampleDistance, float, 0.1f, 100.0f);
128 vtkGetMacro(MinimumImageSampleDistance, float);
130
132
136 vtkSetClampMacro(MaximumImageSampleDistance, float, 0.1f, 100.0f);
137 vtkGetMacro(MaximumImageSampleDistance, float);
139
141
154 vtkSetMacro(FinalColorWindow, float);
155 vtkGetMacro(FinalColorWindow, float);
156 vtkSetMacro(FinalColorLevel, float);
157 vtkGetMacro(FinalColorLevel, float);
159
161
166 vtkSetMacro(MaxMemoryInBytes, vtkIdType);
167 vtkGetMacro(MaxMemoryInBytes, vtkIdType);
169
171
176 vtkSetClampMacro(MaxMemoryFraction, float, 0.1f, 1.0f);
177 vtkGetMacro(MaxMemoryFraction, float);
179
181
189 vtkSetMacro(ReportProgress, bool);
190 vtkGetMacro(ReportProgress, bool);
192
199 virtual int IsRenderSupported(
200 vtkRenderWindow* vtkNotUsed(window), vtkVolumeProperty* vtkNotUsed(property))
201 {
202 return 0;
203 }
204
205 void CreateCanonicalView(vtkRenderer* ren, vtkVolume* volume, vtkImageData* image, int blend_mode,
206 double viewDirection[3], double viewUp[3]);
207
209
230 vtkGetObjectMacro(MaskInput, vtkImageData);
232
233 enum
234 {
235 BinaryMaskType = 0,
236 LabelMapMaskType
237 };
238
240
244 vtkSetMacro(MaskType, int);
245 vtkGetMacro(MaskType, int);
249
251
259 vtkSetClampMacro(MaskBlendFactor, float, 0.0f, 1.0f);
260 vtkGetMacro(MaskBlendFactor, float);
262
264
271 vtkSetClampMacro(GlobalIlluminationReach, float, 0.0f, 1.0f);
272 vtkGetMacro(GlobalIlluminationReach, float);
274
276
287 vtkSetClampMacro(VolumetricScatteringBlending, float, 0.0f, 2.0f);
288 vtkGetMacro(VolumetricScatteringBlending, float);
290
292
306 vtkSetMacro(RenderToImage, vtkTypeBool);
307 vtkGetMacro(RenderToImage, vtkTypeBool);
308 vtkBooleanMacro(RenderToImage, vtkTypeBool);
310
312
317 vtkSetMacro(DepthImageScalarType, int);
318 vtkGetMacro(DepthImageScalarType, int);
323
325
336 vtkSetMacro(ClampDepthToBackface, vtkTypeBool);
337 vtkGetMacro(ClampDepthToBackface, vtkTypeBool);
338 vtkBooleanMacro(ClampDepthToBackface, vtkTypeBool);
340
347 virtual void GetDepthImage(vtkImageData*) {}
348
355 virtual void GetColorImage(vtkImageData*) {}
356
361 void Render(vtkRenderer*, vtkVolume*) override;
362
367 virtual void GPURender(vtkRenderer*, vtkVolume*) {}
368
376
389 virtual void GetReductionRatio(double ratio[3]) = 0;
390
392 {
393 SCALAR = 0, // default
394 NATIVE
395 };
396
398
414 vtkSetMacro(ColorRangeType, int);
415 vtkGetMacro(ColorRangeType, int);
416 vtkSetMacro(ScalarOpacityRangeType, int);
417 vtkGetMacro(ScalarOpacityRangeType, int);
418 vtkSetMacro(GradientOpacityRangeType, int);
419 vtkGetMacro(GradientOpacityRangeType, int);
421
422 vtkDataSet* GetInput() override { return this->GetInput(0); }
423
425
429 void RemoveInputConnection(int port, vtkAlgorithmOutput* input) override;
430 void RemoveInputConnection(int port, int idx) override;
431 void SetInputConnection(int port, vtkAlgorithmOutput* input) override;
433 {
434 this->SetInputConnection(0, input);
435 }
437
442
444
445 double* GetBoundsFromPort(int port) VTK_SIZEHINT(6);
446
448
451 vtkSetStringMacro(Transfer2DYAxisArray);
452 vtkGetStringMacro(Transfer2DYAxisArray);
454
455protected:
458
467 int FillInputPortInformation(int port, vtkInformation* info) override;
468
480 void TransformInput(int port);
481
483
494 int ValidateInput(vtkVolumeProperty* property, int port);
496
498
503 void CloneInput(vtkDataSet* input, int port);
505
506 // Special version of render called during the creation
507 // of a canonical view.
509
510 // Methods called by the AMR Volume Mapper.
511 virtual void PreRender(vtkRenderer* ren, vtkVolume* vol, double datasetBounds[6],
512 double scalarRange[2], int numberOfScalarComponents, unsigned int numberOfLevels) = 0;
513
514 // \pre input is up-to-date
515 virtual void RenderBlock(vtkRenderer* ren, vtkVolume* vol, unsigned int level) = 0;
516
517 virtual void PostRender(vtkRenderer* ren, int numberOfScalarComponents) = 0;
518 vtkDataSet* GetInput(int port) override;
519
525 void SetCellFlag(int cellFlag);
526 void RemovePortInternal(int port);
527
533
534 // Render to texture mode flag
536
537 // Depth image scalar type
539
540 // Clamp depth values to the depth of the face at which the ray
541 // exits the volume
543
544 // Enable / disable stochastic jittering
546
547 // Secondary rays ambient/global adjustment coefficient
548 float GlobalIlluminationReach = 0.0;
549
550 float VolumetricScatteringBlending = 0.0;
551
552 // Enable / disable two pass rendering
555
556 // The distance between sample points along the ray
558
562
565
566 // 1 if we are generating the canonical image, 0 otherwise
569
571
575 vtkSetClampMacro(AMRMode, vtkTypeBool, 0, 1);
576 vtkGetMacro(AMRMode, vtkTypeBool);
577 vtkBooleanMacro(AMRMode, vtkTypeBool);
579
583
585
586 // Transfer function range type
590
591 // Point data or cell data (or field data, not handled) ?
593
607
608 using DataMap = std::unordered_map<int, vtkDataSet*>;
610 vtkDataSet* FindData(int port, DataMap& container);
611
612 double ClippedCroppingRegionPlanes[6];
613
616
618 std::vector<int> Ports;
619 std::vector<int> RemovedPorts;
621
627
634
635private:
637 void operator=(const vtkGPUVolumeRayCastMapper&) = delete;
638};
639
640VTK_ABI_NAMESPACE_END
641#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:166
Ray casting performed on the GPU.
virtual void GetDepthImage(vtkImageData *)
Low level API to export the depth texture as vtkImageData in RenderToImage mode.
void CloneInput(vtkDataSet *input, int port)
Shallow-copy the inputs into a transform-adjusted clone.
vtkDataSet * GetInput(int port) override
Set/Get the input data.
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.
double * GetBoundsFromPort(int port)
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.
vtkDataSet * GetTransformedInput(int port=0)
virtual void GetColorImage(vtkImageData *)
Low level API to export the color texture as vtkImageData in RenderToImage mode.
vtkDataSet * GetInput() override
Set/Get the input data.
vtkContourValues * GetDepthPassContourValues()
Return handle to contour values container so that values can be set by the application.
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.
int ValidateInput(vtkVolumeProperty *property, int port)
This method is used by the Render() method to validate everything before attempting to render.
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.
std::unordered_map< int, vtkDataSet * > DataMap
void ReleaseGraphicsResources(vtkWindow *) override
Release any graphics resources that are being consumed by this mapper.
void TransformInput(int port)
A transformation is applied (translation) to the input.
void Render(vtkRenderer *, vtkVolume *) override
Initialize rendering for this volume.
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
virtual void RenderBlock(vtkRenderer *ren, vtkVolume *vol, unsigned int level)=0
void SetInputConnection(int port, vtkAlgorithmOutput *input) override
Add/Remove input connections.
static vtkGPUVolumeRayCastMapper * New()
int GetInputCount()
Number of currently active ports.
virtual void ClipCroppingRegionPlanes()
Compute the cropping planes clipped by the bounds of the volume.
int FillInputPortInformation(int port, vtkInformation *info) override
Handle inputs.
vtkDataSet * FindData(int port, DataMap &container)
void SetMaskTypeToBinary()
Set the mask type, if mask is to be used.
void RemovePortInternal(int port)
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
a simple class to control print indentation
Definition vtkIndent.h:108
Store vtkAlgorithm input/output information.
create a window for renderers to draw into
abstract specification for renderers
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:120
window superclass for vtkRenderWindow
Definition vtkWindow.h:48
int vtkTypeBool
Definition vtkABI.h:64
int vtkIdType
Definition vtkType.h:315
#define VTK_SIZEHINT(...)