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.
164 lines
5.7 KiB
C
164 lines
5.7 KiB
C
|
3 weeks ago
|
/*=========================================================================
|
||
|
|
|
||
|
|
Program: Visualization Toolkit
|
||
|
|
Module: vtkOpenGLVolumeTextureMapper3D.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 vtkOpenGLVolumeTextureMapper3D
|
||
|
|
* @brief concrete implementation of 3D volume texture mapping
|
||
|
|
*
|
||
|
|
*
|
||
|
|
* vtkOpenGLVolumeTextureMapper3D renders a volume using 3D texture mapping.
|
||
|
|
* See vtkVolumeTextureMapper3D for full description.
|
||
|
|
*
|
||
|
|
* @sa
|
||
|
|
* vtkVolumeTextureMapper3D vtkVolumeMapper
|
||
|
|
* @deprecated
|
||
|
|
*/
|
||
|
|
|
||
|
|
#ifndef vtkOpenGLVolumeTextureMapper3D_h
|
||
|
|
#define vtkOpenGLVolumeTextureMapper3D_h
|
||
|
|
|
||
|
|
#include "vtkRenderingVolumeOpenGLModule.h" // For export macro
|
||
|
|
#include "vtkVolumeTextureMapper3D.h"
|
||
|
|
#include "vtkOpenGL.h" // GLfloat type is used in some method signatures.
|
||
|
|
|
||
|
|
class vtkRenderWindow;
|
||
|
|
class vtkVolumeProperty;
|
||
|
|
|
||
|
|
#if !defined(VTK_LEGACY_REMOVE)
|
||
|
|
class VTKRENDERINGVOLUMEOPENGL_EXPORT vtkOpenGLVolumeTextureMapper3D
|
||
|
|
: public vtkVolumeTextureMapper3D
|
||
|
|
{
|
||
|
|
public:
|
||
|
|
vtkTypeMacro(vtkOpenGLVolumeTextureMapper3D,vtkVolumeTextureMapper3D);
|
||
|
|
void PrintSelf(ostream& os, vtkIndent indent);
|
||
|
|
|
||
|
|
static vtkOpenGLVolumeTextureMapper3D *New();
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Is hardware rendering supported? No if the input data is
|
||
|
|
* more than one independent component, or if the hardware does
|
||
|
|
* not support the required extensions
|
||
|
|
*/
|
||
|
|
int IsRenderSupported(vtkVolumeProperty *,
|
||
|
|
vtkRenderer *ren);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE
|
||
|
|
* DO NOT USE THIS METHOD OUTSIDE OF THE RENDERING PROCESS
|
||
|
|
* Render the volume
|
||
|
|
*/
|
||
|
|
virtual void Render(vtkRenderer *ren, vtkVolume *vol);
|
||
|
|
|
||
|
|
// Desciption:
|
||
|
|
// Initialize when we go to render, or go to answer the
|
||
|
|
// IsRenderSupported question. Don't call unless we have
|
||
|
|
// a valid OpenGL context!
|
||
|
|
vtkGetMacro( Initialized, int );
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Release any graphics resources that are being consumed by this texture.
|
||
|
|
* The parameter window could be used to determine which graphic
|
||
|
|
* resources to release.
|
||
|
|
*/
|
||
|
|
void ReleaseGraphicsResources(vtkWindow *);
|
||
|
|
|
||
|
|
protected:
|
||
|
|
vtkOpenGLVolumeTextureMapper3D();
|
||
|
|
~vtkOpenGLVolumeTextureMapper3D();
|
||
|
|
|
||
|
|
void GetLightInformation(vtkRenderer *ren,
|
||
|
|
vtkVolume *vol,
|
||
|
|
GLfloat lightDirection[2][4],
|
||
|
|
GLfloat lightDiffuseColor[2][4],
|
||
|
|
GLfloat lightSpecularColor[2][4],
|
||
|
|
GLfloat halfwayVector[2][4],
|
||
|
|
GLfloat *ambient );
|
||
|
|
|
||
|
|
int Initialized;
|
||
|
|
GLuint Volume1Index;
|
||
|
|
GLuint Volume2Index;
|
||
|
|
GLuint Volume3Index;
|
||
|
|
GLuint ColorLookupIndex;
|
||
|
|
GLuint AlphaLookupIndex;
|
||
|
|
vtkRenderWindow *RenderWindow;
|
||
|
|
|
||
|
|
bool SupportsCompressedTexture;
|
||
|
|
bool SupportsNonPowerOfTwoTextures;
|
||
|
|
|
||
|
|
// Actual internal texture format (uncompressed vs compressed)
|
||
|
|
// Computed in Render()
|
||
|
|
int InternalAlpha; // GLint
|
||
|
|
int InternalLA; // GLint
|
||
|
|
int InternalRGB; // GLint
|
||
|
|
int InternalRGBA; // GLint
|
||
|
|
|
||
|
|
void Initialize(vtkRenderer *r);
|
||
|
|
|
||
|
|
virtual void RenderNV(vtkRenderer *ren, vtkVolume *vol);
|
||
|
|
virtual void RenderFP(vtkRenderer *ren, vtkVolume *vol);
|
||
|
|
|
||
|
|
void RenderOneIndependentNoShadeFP( vtkRenderer *ren,
|
||
|
|
vtkVolume *vol );
|
||
|
|
void RenderOneIndependentShadeFP( vtkRenderer *ren, vtkVolume *vol );
|
||
|
|
void RenderTwoDependentNoShadeFP( vtkRenderer *ren, vtkVolume *vol );
|
||
|
|
void RenderTwoDependentShadeFP( vtkRenderer *ren, vtkVolume *vol );
|
||
|
|
void RenderFourDependentNoShadeFP( vtkRenderer *ren, vtkVolume *vol );
|
||
|
|
void RenderFourDependentShadeFP( vtkRenderer *ren, vtkVolume *vol );
|
||
|
|
|
||
|
|
void RenderOneIndependentNoShadeNV( vtkRenderer *ren, vtkVolume *vol );
|
||
|
|
void RenderOneIndependentShadeNV( vtkRenderer *ren, vtkVolume *vol );
|
||
|
|
void RenderTwoDependentNoShadeNV( vtkRenderer *ren, vtkVolume *vol );
|
||
|
|
void RenderTwoDependentShadeNV( vtkRenderer *ren, vtkVolume *vol );
|
||
|
|
void RenderFourDependentNoShadeNV( vtkRenderer *ren, vtkVolume *vol );
|
||
|
|
void RenderFourDependentShadeNV( vtkRenderer *ren, vtkVolume *vol );
|
||
|
|
|
||
|
|
void SetupOneIndependentTextures( vtkRenderer *ren, vtkVolume *vol );
|
||
|
|
void SetupTwoDependentTextures( vtkRenderer *ren, vtkVolume *vol );
|
||
|
|
void SetupFourDependentTextures( vtkRenderer *ren, vtkVolume *vol );
|
||
|
|
|
||
|
|
void SetupRegisterCombinersNoShadeNV( vtkRenderer *ren,
|
||
|
|
vtkVolume *vol,
|
||
|
|
int components );
|
||
|
|
|
||
|
|
void SetupRegisterCombinersShadeNV( vtkRenderer *ren,
|
||
|
|
vtkVolume *vol,
|
||
|
|
int components );
|
||
|
|
|
||
|
|
void DeleteTextureIndex( GLuint *index );
|
||
|
|
void CreateTextureIndex( GLuint *index );
|
||
|
|
|
||
|
|
void RenderPolygons( vtkRenderer *ren,
|
||
|
|
vtkVolume *vol,
|
||
|
|
int stages[4] );
|
||
|
|
|
||
|
|
void SetupProgramLocalsForShadingFP( vtkRenderer *ren, vtkVolume *vol );
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Check if we can support this texture size for the number of components.
|
||
|
|
*/
|
||
|
|
int IsTextureSizeSupported(int size[3],
|
||
|
|
int components);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Common code for setting up interpolation / clamping on 3D textures
|
||
|
|
*/
|
||
|
|
void Setup3DTextureParameters( vtkVolumeProperty *property );
|
||
|
|
|
||
|
|
private:
|
||
|
|
vtkOpenGLVolumeTextureMapper3D(const vtkOpenGLVolumeTextureMapper3D&) VTK_DELETE_FUNCTION;
|
||
|
|
void operator=(const vtkOpenGLVolumeTextureMapper3D&) VTK_DELETE_FUNCTION;
|
||
|
|
};
|
||
|
|
#endif // VTK_LEGACY_REMOVE
|
||
|
|
#endif
|