comac_desk_app/ThirdpartyLibs/Libs/windows-x86_64/vtk/include/vtkSurfaceLICMapper.h

134 lines
4.3 KiB
C
Raw Permalink Normal View History

2024-11-21 11:50:43 +08:00
/*=========================================================================
Program: Visualization Toolkit
Module: vtkSurfaceLICMapper.h
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
/**
* @class vtkSurfaceLICMapper
* @brief mapper that performs LIC on the surface of
* arbitrary geometry.
*
*
* vtkSurfaceLICMapper performs LIC on the surface of arbitrary
* geometry. Point vectors are used as the vector field for generating the LIC.
* The implementation was originallu based on "Image Space Based Visualization
* on Unsteady Flow on Surfaces" by Laramee, Jobard and Hauser appeared in
* proceedings of IEEE Visualization '03, pages 131-138.
*
* Internal pipeline:
* <pre>
* noise
* |
* [ PROJ (GAT) (COMP) LIC2D (SCAT) SHADE (CCE) DEP]
* | |
* vectors surface LIC
* </pre>
* PROj - project vectors onto surface
* GAT - gather data for compositing and guard pixel generation (parallel only)
* COMP - composite gathered data
* LIC2D - line intengral convolution, see vtkLineIntegralConvolution2D.
* SCAT - scatter result (parallel only, not all compositors use it)
* SHADE - combine LIC and scalar colors
* CCE - color contrast enhancement (optional)
* DEP - depth test and copy to back buffer
*
* The result of each stage is cached in a texture so that during interaction
* a stage may be skipped if the user has not modified its parameters or input
* data.
*
* The parallel parts of algorithm are implemented in vtkPSurfaceLICMapper.
* Note that for MPI enabled builds this class will be automatically created
* by the object factory.
*
* @sa
* vtkLineIntegralConvolution2D
*/
#ifndef vtkSurfaceLICMapper_h
#define vtkSurfaceLICMapper_h
#include "vtkOpenGLPolyDataMapper.h"
#include "vtkRenderingLICOpenGL2Module.h" // For export macro
class vtkSurfaceLICInterface;
class vtkPainterCommunicator;
class VTKRENDERINGLICOPENGL2_EXPORT vtkSurfaceLICMapper : public vtkOpenGLPolyDataMapper
{
public:
static vtkSurfaceLICMapper* New();
vtkTypeMacro(vtkSurfaceLICMapper, vtkOpenGLPolyDataMapper);
void PrintSelf(ostream& os, vtkIndent indent) override;
/**
* Release any graphics resources that are being consumed by this mapper.
* The parameter window could be used to determine which graphic
* resources to release. In this case, releases the display lists.
*/
void ReleaseGraphicsResources(vtkWindow* win) override;
/**
* Implemented by sub classes. Actual rendering is done here.
*/
void RenderPiece(vtkRenderer* ren, vtkActor* act) override;
/**
* Shallow copy of an actor.
*/
void ShallowCopy(vtkAbstractMapper*) override;
///@{
/**
* Get the vtkSurfaceLICInterface used by this mapper
*/
vtkGetObjectMacro(LICInterface, vtkSurfaceLICInterface);
///@}
protected:
vtkSurfaceLICMapper();
~vtkSurfaceLICMapper() override;
/**
* Methods used for parallel benchmarks. Use cmake to define
* vtkSurfaceLICMapperTIME to enable benchmarks. During each
* update timing information is stored, it can be written to
* disk by calling WriteLog.
*/
virtual void StartTimerEvent(const char*) {}
virtual void EndTimerEvent(const char*) {}
/**
* Build the VBO/IBO, called by UpdateBufferObjects
*/
void BuildBufferObjects(vtkRenderer* ren, vtkActor* act) override;
protected:
/**
* Set the shader parameters related to the mapper/input data, called by UpdateShader
*/
void SetMapperShaderParameters(vtkOpenGLHelper& cellBO, vtkRenderer* ren, vtkActor* act) override;
/**
* Perform string replacements on the shader templates
*/
void ReplaceShaderValues(
std::map<vtkShader::Type, vtkShader*> shaders, vtkRenderer* ren, vtkActor* act) override;
vtkSurfaceLICInterface* LICInterface;
private:
vtkSurfaceLICMapper(const vtkSurfaceLICMapper&) = delete;
void operator=(const vtkSurfaceLICMapper&) = delete;
};
#endif