You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
154 lines
5.4 KiB
154 lines
5.4 KiB
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: $RCSfile: vtkOpenGLVolumeTextureMapper3D.h,v $
|
|
|
|
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.
|
|
|
|
=========================================================================*/
|
|
// .NAME vtkOpenGLVolumeTextureMapper3D - concrete implementation of 3D volume texture mapping
|
|
|
|
// .SECTION Description
|
|
// vtkOpenGLVolumeTextureMapper3D renders a volume using 3D texture mapping.
|
|
// See vtkVolumeTextureMapper3D for full description.
|
|
|
|
// .SECTION see also
|
|
// vtkVolumeTextureMapper3D vtkVolumeMapper
|
|
|
|
#ifndef __vtkOpenGLVolumeTextureMapper3D_h
|
|
#define __vtkOpenGLVolumeTextureMapper3D_h
|
|
|
|
#include "vtkVolumeTextureMapper3D.h"
|
|
|
|
#ifndef VTK_IMPLEMENT_MESA_CXX
|
|
# include "vtkOpenGL.h" // GLfloat type is used in some method signatures.
|
|
#endif
|
|
|
|
|
|
class vtkRenderWindow;
|
|
class vtkVolumeProperty;
|
|
|
|
class VTK_VOLUMERENDERING_EXPORT vtkOpenGLVolumeTextureMapper3D : public vtkVolumeTextureMapper3D
|
|
{
|
|
public:
|
|
vtkTypeRevisionMacro(vtkOpenGLVolumeTextureMapper3D,vtkVolumeTextureMapper3D);
|
|
void PrintSelf(ostream& os, vtkIndent indent);
|
|
|
|
static vtkOpenGLVolumeTextureMapper3D *New();
|
|
|
|
// Description:
|
|
// 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 *);
|
|
|
|
//BTX
|
|
|
|
// Description:
|
|
// 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);
|
|
|
|
//ETX
|
|
|
|
// 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 );
|
|
|
|
// Description:
|
|
// 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();
|
|
|
|
//BTX
|
|
|
|
void GetLightInformation(vtkRenderer *ren,
|
|
vtkVolume *vol,
|
|
GLfloat lightDirection[2][4],
|
|
GLfloat lightDiffuseColor[2][4],
|
|
GLfloat lightSpecularColor[2][4],
|
|
GLfloat halfwayVector[2][4],
|
|
GLfloat *ambient );
|
|
//ETX
|
|
|
|
int Initialized;
|
|
GLuint Volume1Index;
|
|
GLuint Volume2Index;
|
|
GLuint Volume3Index;
|
|
GLuint ColorLookupIndex;
|
|
GLuint AlphaLookupIndex;
|
|
vtkRenderWindow *RenderWindow;
|
|
|
|
void Initialize();
|
|
|
|
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 );
|
|
|
|
// Description:
|
|
// Check if we can support this texture size.
|
|
int IsTextureSizeSupported( int size[3] );
|
|
|
|
// Description:
|
|
// Common code for setting up interpolation / clamping on 3D textures
|
|
void Setup3DTextureParameters( vtkVolumeProperty *property );
|
|
|
|
private:
|
|
vtkOpenGLVolumeTextureMapper3D(const vtkOpenGLVolumeTextureMapper3D&); // Not implemented.
|
|
void operator=(const vtkOpenGLVolumeTextureMapper3D&); // Not implemented.
|
|
};
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|