VTK  9.2.6
vtkOpenGLFluidMapper.h
Go to the documentation of this file.
1/*=========================================================================
2
3 Program: Visualization Toolkit
4
5 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
6 All rights reserved.
7 See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
8
9 This software is distributed WITHOUT ANY WARRANTY; without even
10 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
11 PURPOSE. See the above copyright notice for more information.
12
13=========================================================================*/
28
29#ifndef vtkOpenGLFluidMapper_h
30#define vtkOpenGLFluidMapper_h
31
33
34#include "vtkOpenGLHelper.h" // used for ivars
35#include "vtkRenderingOpenGL2Module.h" // For export macro
36#include "vtkShader.h" // for methods
37#include "vtkSmartPointer.h" // for ivars
38
39#include <map> //for methods
40
41class vtkMatrix3x3;
42class vtkMatrix4x4;
45class vtkOpenGLState;
48class vtkPolyData;
50
51class VTKRENDERINGOPENGL2_EXPORT vtkOpenGLFluidMapper : public vtkAbstractVolumeMapper
52{
53public:
56 void PrintSelf(ostream& os, vtkIndent indent) override;
57
59
65
67
70 vtkSetMacro(ScalarVisibility, bool);
71 vtkGetMacro(ScalarVisibility, bool);
72 vtkBooleanMacro(ScalarVisibility, bool);
74
76
83 vtkSetMacro(ParticleRadius, float);
84 vtkGetMacro(ParticleRadius, float);
86
88
94 vtkSetMacro(SurfaceFilterIterations, uint32_t);
95 vtkGetMacro(SurfaceFilterIterations, uint32_t);
97
99
106
108
115 vtkSetMacro(SurfaceFilterRadius, uint32_t);
116 vtkGetMacro(SurfaceFilterRadius, uint32_t);
118
120
127
132 {
135 // New filter method can be added here,
137 };
138
140
146
152 void SetNarrowRangeFilterParameters(float lambda, float mu)
153 {
154 this->NRFilterLambda = lambda;
155 this->NRFilterMu = mu;
156 }
157
163 {
164 this->BiGaussFilterSigmaDepth = sigmaDepth;
165 }
166
179
181
187
189
194 vtkSetVector3Macro(AttenuationColor, float);
195 vtkGetVector3Macro(AttenuationColor, float);
197
199
203 vtkSetVector3Macro(OpaqueColor, float);
204 vtkGetVector3Macro(OpaqueColor, float);
206
208
214 vtkSetMacro(ParticleColorPower, float);
215 vtkGetMacro(ParticleColorPower, float);
217
219
225 vtkSetMacro(ParticleColorScale, float);
226 vtkGetMacro(ParticleColorScale, float);
228
230
236 vtkSetMacro(AttenuationScale, float);
237 vtkGetMacro(AttenuationScale, float);
239
241
247 vtkSetMacro(AdditionalReflection, float);
248 vtkGetMacro(AdditionalReflection, float);
250
252
258 vtkSetMacro(RefractionScale, float);
259 vtkGetMacro(RefractionScale, float);
261
263
266 vtkSetMacro(RefractiveIndex, float);
267 vtkGetMacro(RefractiveIndex, float);
269
273 void Render(vtkRenderer* ren, vtkVolume* vol) override;
274
281
282protected:
285
290 vtkOpenGLHelper& glHelper, vtkRenderer* renderer, vtkVolume* vol);
291
296 vtkOpenGLHelper& glHelper, vtkRenderer* renderer, vtkVolume* vol);
297
301 void SetupBuffers(vtkOpenGLRenderWindow* const renderWindow);
302
306 void RenderParticles(vtkRenderer* renderer, vtkVolume* vol);
307
308 // Public parameters, their usage are stated at their Get/Set functions
309 // ======>>>>>
310 float ParticleRadius = 1.0f;
311
314 uint32_t SurfaceFilterRadius = 5u;
315 float NRFilterLambda = 10.0f;
316 float NRFilterMu = 1.0f;
318
321
323
324 float OpaqueColor[3]{ 0.0f, 0.0f, 0.95f };
325 float AttenuationColor[3]{ 0.5f, 0.2f, 0.05f };
326 float ParticleColorPower = 0.1f;
327 float ParticleColorScale = 1.0f;
328 float AttenuationScale = 1.0f;
330 float RefractionScale = 1.0f;
331 float RefractiveIndex = 1.33f;
332
333 bool ScalarVisibility = false;
334 bool InDepthPass = true;
335
336 // Private parameters ======>>>>>
337
338 // Indicate that the input data has a color buffer
339 bool HasVertexColor = false;
340
341 // Cache viewport dimensions
346
347 // Cache camera parameters
354
355 // Frame buffers
361
362 // Screen quad render
367
368 // The VBO and its layout for rendering particles
370 vtkTimeStamp VBOBuildTime; // When was the OpenGL VBO updated?
372
373 // Texture buffers
386
387 // These are optional texture buffers
394
398
399private:
401 void operator=(const vtkOpenGLFluidMapper&) = delete;
402};
403
404#endif
a simple class to control print indentation
Definition vtkIndent.h:40
represent and manipulate 3x3 transformation matrices
represent and manipulate 4x4 transformation matrices
vtkOpenGLQuadHelper * QuadFluidDepthFilter[NumFilterMethods]
void SetInputData(vtkPolyData *in)
Specify the input data to map.
vtkOpenGLQuadHelper * QuadFinalBlend
vtkSmartPointer< vtkOpenGLFramebufferObject > FBThickness
FluidDisplayMode
Display mode for the fluid, default value is TransparentFluidVolume.
void ReleaseGraphicsResources(vtkWindow *w) override
Release graphics resources and ask components to release their own resources.
vtkSmartPointer< vtkOpenGLVertexBufferObjectGroup > VBOs
void SetNarrowRangeFilterParameters(float lambda, float mu)
Optional parameters, exclusively for narrow range filter The first parameter is to control smoothing ...
vtkTextureObject * TexBuffer[NumTexBuffers]
void Render(vtkRenderer *ren, vtkVolume *vol) override
This calls RenderPiece.
vtkSmartPointer< vtkOpenGLFramebufferObject > FBCompNormal
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkPolyData * GetInput()
Specify the input data to map.
vtkSmartPointer< vtkOpenGLFramebufferObject > FBFluidEyeZ
uint32_t ThicknessAndVolumeColorFilterIterations
vtkSmartPointer< vtkOpenGLFramebufferObject > FBFilterThickness
vtkOpenGLQuadHelper * QuadThicknessFilter
FluidSurfaceFilterMethod
Filter method to filter the depth buffer.
void SetupBuffers(vtkOpenGLRenderWindow *const renderWindow)
Setup the texture buffers.
FluidSurfaceFilterMethod SurfaceFilterMethod
~vtkOpenGLFluidMapper() override
vtkTextureObject * OptionalTexBuffer[NumOptionalTexBuffers]
vtkOpenGLQuadHelper * QuadFluidNormal
void UpdateDepthThicknessColorShaders(vtkOpenGLHelper &glHelper, vtkRenderer *renderer, vtkVolume *vol)
Perform string replacements on the shader templates.
static vtkOpenGLFluidMapper * New()
void RenderParticles(vtkRenderer *renderer, vtkVolume *vol)
Render the fluid particles.
vtkSmartPointer< vtkOpenGLFramebufferObject > FBFilterDepth
void SetBilateralGaussianFilterParameter(float sigmaDepth)
Optional parameters, exclusively for bilateral gaussian filter The parameter is for controlling smoot...
vtkOpenGLHelper GLHelperDepthThickness
void SetDepthThicknessColorShaderParameters(vtkOpenGLHelper &glHelper, vtkRenderer *renderer, vtkVolume *vol)
Set the shader parameters related to the actor/mapper/camera.
Internal class which encapsulates OpenGL FramebufferObject.
Class to make rendering a full screen quad easier.
OpenGL rendering window.
OpenGL state storage.
manage vertex buffer objects shared within a mapper
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition vtkPolyData.h:91
abstract specification for renderers
Definition vtkRenderer.h:73
Hold a reference to a vtkObjectBase instance.
abstracts an OpenGL texture object.
record modification and/or execution time
represents a volume (data & properties) in a rendered scene
Definition vtkVolume.h:51
window superclass for vtkRenderWindow
Definition vtkWindow.h:39
int vtkTypeBool
Definition vtkABI.h:69