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.
158 lines
4.2 KiB
C++
158 lines
4.2 KiB
C++
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: vtkOpenGLProjectedAAHexahedraMapper.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 vtkOpenGLProjectedAAHexahedraMapper
|
|
* @brief OpenGL implementation of a volume mapper for axis-aligned hexahedra
|
|
*
|
|
* High quality volume renderer for axis-aligned hexahedra
|
|
*
|
|
* @par Implementation:
|
|
* Implementation by Stephane Marchesin (stephane.marchesin@gmail.com)
|
|
* CEA/DIF - Commissariat a l'Energie Atomique, Centre DAM Ile-De-France
|
|
* BP12, F-91297 Arpajon, France.
|
|
*
|
|
* @par Implementation:
|
|
* This mapper implements the paper
|
|
* "High-Quality, Semi-Analytical Volume Rendering for AMR Data",
|
|
* Stephane Marchesin and Guillaume Colin de Verdiere, IEEE Vis 2009.
|
|
*/
|
|
|
|
#ifndef vtkOpenGLProjectedAAHexahedraMapper_h
|
|
#define vtkOpenGLProjectedAAHexahedraMapper_h
|
|
|
|
#include "vtkRenderingVolumeOpenGLModule.h" // For export macro
|
|
#include "vtkProjectedAAHexahedraMapper.h"
|
|
|
|
class vtkFloatArray;
|
|
class vtkPoints;
|
|
class vtkUnsignedCharArray;
|
|
class vtkVisibilitySort;
|
|
class vtkVolumeProperty;
|
|
class vtkRenderWindow;
|
|
class vtkShaderProgram2;
|
|
|
|
class VTKRENDERINGVOLUMEOPENGL_EXPORT vtkOpenGLProjectedAAHexahedraMapper
|
|
: public vtkProjectedAAHexahedraMapper
|
|
{
|
|
public:
|
|
vtkTypeMacro(vtkOpenGLProjectedAAHexahedraMapper,
|
|
vtkProjectedAAHexahedraMapper);
|
|
static vtkOpenGLProjectedAAHexahedraMapper *New();
|
|
virtual void PrintSelf(ostream &os, vtkIndent indent);
|
|
|
|
/**
|
|
* Check if the required OpenGL extensions are supported by the OpenGL
|
|
* context attached to the render window `w'.
|
|
*/
|
|
bool IsRenderSupported(vtkRenderWindow *w);
|
|
|
|
void Render(vtkRenderer *renderer, vtkVolume *volume);
|
|
|
|
void ReleaseGraphicsResources(vtkWindow *window);
|
|
|
|
protected:
|
|
vtkOpenGLProjectedAAHexahedraMapper();
|
|
~vtkOpenGLProjectedAAHexahedraMapper();
|
|
|
|
/**
|
|
* Convert the input scalar values to floats.
|
|
*/
|
|
float* ConvertScalars(vtkDataArray* inScalars);
|
|
|
|
/**
|
|
* Convert the input cell coordinates to floats.
|
|
*/
|
|
float* ConvertPoints(vtkPoints* inPoints);
|
|
|
|
/**
|
|
* Iterate over all the hexahedal input cells,
|
|
* sort and render them.
|
|
*/
|
|
virtual void ProjectHexahedra(vtkRenderer *renderer, vtkVolume *volume);
|
|
|
|
/**
|
|
* Load the OpenGL extensions and allocate the vertex arrays.
|
|
*/
|
|
void Initialize(vtkRenderer *renderer, vtkVolume *volume);
|
|
|
|
/**
|
|
* Update the preintegration texture; this is needed whenever the mesh
|
|
* changes.
|
|
*/
|
|
void UpdatePreintegrationTexture(vtkVolume *vome, vtkDataArray *scalars);
|
|
|
|
/**
|
|
* Create the OpenGL geometry/vertex/fragment programs for
|
|
* hexahedral cell rendering.
|
|
*/
|
|
void CreateProgram(vtkRenderWindow *w);
|
|
|
|
/**
|
|
* Set the OpenGL state for hexahedral cell rendering.
|
|
*/
|
|
void SetState(double* observer);
|
|
|
|
/**
|
|
* Render a single axis-aligned hexahedal cell.
|
|
*/
|
|
void RenderHexahedron(float min[3], float max[3], float scalars[8]);
|
|
|
|
/**
|
|
* Restore the OpenGL state touched by SetState().
|
|
*/
|
|
void UnsetState();
|
|
|
|
|
|
bool Initialized;
|
|
|
|
int UsingCellColors;
|
|
|
|
float MaxCellSize;
|
|
vtkTimeStamp InputAnalyzedTime;
|
|
vtkTimeStamp PreintTextureTime;
|
|
vtkTimeStamp ColorsMappedTime;
|
|
|
|
unsigned int PreintTexture;
|
|
|
|
// OpenGL arrays for primitive submission
|
|
float* pos_points;
|
|
float* min_points;
|
|
float* node_data1;
|
|
float* node_data2;
|
|
|
|
// number of pending points
|
|
int num_points;
|
|
static const int max_points = 4096;
|
|
|
|
// our shader
|
|
vtkShaderProgram2 *Shader;
|
|
|
|
int GaveError;
|
|
|
|
float ScalarScale, ScalarShift, ScalarResolution;
|
|
float LengthScale;
|
|
|
|
vtkVolumeProperty *LastProperty;
|
|
|
|
vtkFloatArray *ConvertedPoints;
|
|
vtkFloatArray *ConvertedScalars;
|
|
|
|
private:
|
|
vtkOpenGLProjectedAAHexahedraMapper(const vtkOpenGLProjectedAAHexahedraMapper &) VTK_DELETE_FUNCTION;
|
|
void operator=(const vtkOpenGLProjectedAAHexahedraMapper &) VTK_DELETE_FUNCTION;
|
|
};
|
|
|
|
#endif
|