Cloned library of VTK-5.0.0 with extra build files for internal package management.
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.
 
 
 
 
 
 

128 lines
5.4 KiB

/*=========================================================================
Program: Visualization Toolkit
Module: $RCSfile: vtkEncodedGradientShader.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 vtkEncodedGradientShader - Compute shading tables for encoded normals.
//
// .SECTION Description
// vtkEncodedGradientShader computes shading tables for encoded normals
// that indicates the amount of diffuse and specular illumination that is
// received from all light sources at a surface location with that normal.
// For diffuse illumination this is accurate, but for specular illumination
// it is approximate for perspective projections since the center view
// direction is always used as the view direction. Since the shading table is
// dependent on the volume (for the transformation that must be applied to
// the normals to put them into world coordinates) there is a shading table
// per volume. This is necessary because multiple volumes can share a
// volume mapper.
#ifndef __vtkEncodedGradientShader_h
#define __vtkEncodedGradientShader_h
#include "vtkObject.h"
class vtkVolume;
class vtkRenderer;
class vtkEncodedGradientEstimator;
#define VTK_MAX_SHADING_TABLES 100
class VTK_VOLUMERENDERING_EXPORT vtkEncodedGradientShader : public vtkObject
{
public:
static vtkEncodedGradientShader *New();
vtkTypeRevisionMacro(vtkEncodedGradientShader,vtkObject);
// Description:
// Print the vtkEncodedGradientShader
void PrintSelf( ostream& os, vtkIndent indent );
// Description:
// Set / Get the intensity diffuse / specular light used for the
// zero normals.
vtkSetClampMacro( ZeroNormalDiffuseIntensity, float, 0.0, 1.0);
vtkGetMacro( ZeroNormalDiffuseIntensity, float );
vtkSetClampMacro( ZeroNormalSpecularIntensity, float, 0.0, 1.0);
vtkGetMacro( ZeroNormalSpecularIntensity, float );
// Description:
// Cause the shading table to be updated
void UpdateShadingTable( vtkRenderer *ren, vtkVolume *vol,
vtkEncodedGradientEstimator *gradest);
// Description:
// Get the red/green/blue shading table.
float *GetRedDiffuseShadingTable( vtkVolume *vol );
float *GetGreenDiffuseShadingTable( vtkVolume *vol );
float *GetBlueDiffuseShadingTable( vtkVolume *vol );
float *GetRedSpecularShadingTable( vtkVolume *vol );
float *GetGreenSpecularShadingTable( vtkVolume *vol );
float *GetBlueSpecularShadingTable( vtkVolume *vol );
// Description:
// Set the active component for shading. This component's
// ambient / diffuse / specular / specular power values will
// be used to create the shading table. The default is 1.0
vtkSetClampMacro( ActiveComponent, int, 0, 3 );
vtkGetMacro( ActiveComponent, int );
protected:
vtkEncodedGradientShader();
~vtkEncodedGradientShader();
// Description:
// Build a shading table for a light with the specified direction,
// and color for an object of the specified material properties.
// material[0] = ambient, material[1] = diffuse, material[2] = specular
// and material[3] = specular exponent. If the ambient flag is 1,
// then ambient illumination is added. If not, then this means we
// are calculating the "other side" of two sided lighting, so no
// ambient intensity is added in. If the update flag is 0,
// the shading table is overwritten with these new shading values.
// If the updateFlag is 1, then the computed light contribution is
// added to the current shading table values. There is one shading
// table per volume, and the index value indicated which index table
// should be used. It is computed in the UpdateShadingTable method.
void BuildShadingTable( int index,
double lightDirection[3],
double lightColor[3],
double lightIntensity,
double viewDirection[3],
double material[4],
int twoSided,
vtkEncodedGradientEstimator *gradest,
int updateFlag );
// The six shading tables (r diffuse ,g diffuse ,b diffuse,
// r specular, g specular, b specular ) - with an entry for each
// encoded normal plus one entry at the end for the zero normal
// There is one shading table per volume listed in the ShadingTableVolume
// array. A null entry indicates an available slot.
float *ShadingTable[VTK_MAX_SHADING_TABLES][6];
vtkVolume *ShadingTableVolume[VTK_MAX_SHADING_TABLES];
int ShadingTableSize[VTK_MAX_SHADING_TABLES];
int ActiveComponent;
// The intensity of light used for the zero normals, since it
// can not be computed from the normal angles. Defaults to 0.0.
float ZeroNormalDiffuseIntensity;
float ZeroNormalSpecularIntensity;
private:
vtkEncodedGradientShader(const vtkEncodedGradientShader&); // Not implemented.
void operator=(const vtkEncodedGradientShader&); // Not implemented.
};
#endif