You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
199 lines
5.7 KiB
C
199 lines
5.7 KiB
C
3 weeks ago
|
/*=========================================================================
|
||
|
|
||
|
Program: Visualization Toolkit
|
||
|
|
||
|
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 vtkPointGaussianMapper
|
||
|
* @brief draw PointGaussians using imposters
|
||
|
*
|
||
|
*
|
||
|
* A mapper that uses imposters to draw gaussian splats or other shapes if
|
||
|
* custom shader code is set. Supports transparency and picking as well. It
|
||
|
* draws all the points and does not require cell arrays. If cell arrays are
|
||
|
* provided it will only draw the points used by the Verts cell array. The shape
|
||
|
* of the imposter is a triangle.
|
||
|
*/
|
||
|
|
||
|
#ifndef vtkPointGaussianMapper_h
|
||
|
#define vtkPointGaussianMapper_h
|
||
|
|
||
|
#include "vtkPolyDataMapper.h"
|
||
|
#include "vtkRenderingCoreModule.h" // For export macro
|
||
|
|
||
|
class vtkPiecewiseFunction;
|
||
|
|
||
|
class VTKRENDERINGCORE_EXPORT vtkPointGaussianMapper : public vtkPolyDataMapper
|
||
|
{
|
||
|
public:
|
||
|
static vtkPointGaussianMapper* New();
|
||
|
vtkTypeMacro(vtkPointGaussianMapper, vtkPolyDataMapper);
|
||
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Set/Get the optional scale transfer function. This is only
|
||
|
* used when a ScaleArray is also specified.
|
||
|
*/
|
||
|
void SetScaleFunction(vtkPiecewiseFunction*);
|
||
|
vtkGetObjectMacro(ScaleFunction, vtkPiecewiseFunction);
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* The size of the table used in computing scale, used when
|
||
|
* converting a vtkPiecewiseFunction to a table
|
||
|
*/
|
||
|
vtkSetMacro(ScaleTableSize, int);
|
||
|
vtkGetMacro(ScaleTableSize, int);
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Convenience method to set the array to scale with.
|
||
|
*/
|
||
|
vtkSetStringMacro(ScaleArray);
|
||
|
vtkGetStringMacro(ScaleArray);
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Convenience method to set the component of the array to scale with.
|
||
|
*/
|
||
|
vtkSetMacro(ScaleArrayComponent, int);
|
||
|
vtkGetMacro(ScaleArrayComponent, int);
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Set the default scale factor of the point gaussians. This
|
||
|
* defaults to 1.0. All radius computations will be scaled by the factor
|
||
|
* including the ScaleArray. If a vtkPiecewideFunction is used the
|
||
|
* scaling happens prior to the function lookup.
|
||
|
* A scale factor of 0.0 indicates that the splats should be rendered
|
||
|
* as simple points.
|
||
|
*/
|
||
|
vtkSetMacro(ScaleFactor, double);
|
||
|
vtkGetMacro(ScaleFactor, double);
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Treat the points/splats as emissive light sources. The default is true.
|
||
|
*/
|
||
|
vtkSetMacro(Emissive, vtkTypeBool);
|
||
|
vtkGetMacro(Emissive, vtkTypeBool);
|
||
|
vtkBooleanMacro(Emissive, vtkTypeBool);
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Set/Get the optional opacity transfer function. This is only
|
||
|
* used when an OpacityArray is also specified.
|
||
|
*/
|
||
|
void SetScalarOpacityFunction(vtkPiecewiseFunction*);
|
||
|
vtkGetObjectMacro(ScalarOpacityFunction, vtkPiecewiseFunction);
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* The size of the table used in computing opacities, used when
|
||
|
* converting a vtkPiecewiseFunction to a table
|
||
|
*/
|
||
|
vtkSetMacro(OpacityTableSize, int);
|
||
|
vtkGetMacro(OpacityTableSize, int);
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Method to set the optional opacity array. If specified this
|
||
|
* array will be used to generate the opacity values.
|
||
|
*/
|
||
|
vtkSetStringMacro(OpacityArray);
|
||
|
vtkGetStringMacro(OpacityArray);
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Convenience method to set the component of the array to opacify with.
|
||
|
*/
|
||
|
vtkSetMacro(OpacityArrayComponent, int);
|
||
|
vtkGetMacro(OpacityArrayComponent, int);
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Method to override the fragment shader code for the splat. You can
|
||
|
* set this to draw other shapes. For the OPenGL2 backend some of
|
||
|
* the variables you can use and/or modify include,
|
||
|
* opacity - 0.0 to 1.0
|
||
|
* diffuseColor - vec3
|
||
|
* ambientColor - vec3
|
||
|
* offsetVCVSOutput - vec2 offset in view coordinates from the splat center
|
||
|
*/
|
||
|
vtkSetStringMacro(SplatShaderCode);
|
||
|
vtkGetStringMacro(SplatShaderCode);
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* When drawing triangles as opposed too point mode
|
||
|
* (triangles are for splats shaders that are bigger than a pixel)
|
||
|
* this controls how large the triangle will be. By default it
|
||
|
* is large enough to contain a cicle of radius 3.0*scale which works
|
||
|
* well for gaussian splats as after 3.0 standard deviations the
|
||
|
* opacity is near zero. For custom shader codes a different
|
||
|
* value can be used. Generally you should use the lowest value you can
|
||
|
* as it will result in fewer fragments. For example if your custom
|
||
|
* shader only draws a disc of radius 1.0*scale, then set this to 1.0
|
||
|
* to avoid sending many fragments to the shader that will just get
|
||
|
* discarded.
|
||
|
*/
|
||
|
vtkSetMacro(TriangleScale, float);
|
||
|
vtkGetMacro(TriangleScale, float);
|
||
|
//@}
|
||
|
|
||
|
/**
|
||
|
* WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE
|
||
|
* DO NOT USE THIS METHOD OUTSIDE OF THE RENDERING PROCESS
|
||
|
* Used by vtkHardwareSelector to determine if the prop supports hardware
|
||
|
* selection.
|
||
|
*/
|
||
|
bool GetSupportsSelection() override { return true; }
|
||
|
|
||
|
protected:
|
||
|
vtkPointGaussianMapper();
|
||
|
~vtkPointGaussianMapper() override;
|
||
|
|
||
|
char* ScaleArray;
|
||
|
int ScaleArrayComponent;
|
||
|
char* OpacityArray;
|
||
|
int OpacityArrayComponent;
|
||
|
char* SplatShaderCode;
|
||
|
|
||
|
vtkPiecewiseFunction* ScaleFunction;
|
||
|
int ScaleTableSize;
|
||
|
|
||
|
vtkPiecewiseFunction* ScalarOpacityFunction;
|
||
|
int OpacityTableSize;
|
||
|
|
||
|
double ScaleFactor;
|
||
|
vtkTypeBool Emissive;
|
||
|
|
||
|
float TriangleScale;
|
||
|
|
||
|
private:
|
||
|
vtkPointGaussianMapper(const vtkPointGaussianMapper&) = delete;
|
||
|
void operator=(const vtkPointGaussianMapper&) = delete;
|
||
|
};
|
||
|
|
||
|
#endif
|