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.
nmWTAI-Platform/3rd/VTK7.1/include/vtkShadowMapPass.h

156 lines
4.2 KiB
C

/*=========================================================================
Program: Visualization Toolkit
Module: vtkShadowMapPass.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 vtkShadowMapPass
* @brief Implement a shadow mapping render pass.
*
* Render the opaque polygonal geometry of a scene with shadow maps (a
* technique to render hard shadows in hardware).
*
* This pass expects an initialized depth buffer and color buffer.
* Initialized buffers means they have been cleared with farest z-value and
* background color/gradient/transparent color.
* An opaque pass may have been performed right after the initialization.
*
*
*
* Its delegate is usually set to a vtkOpaquePass.
*
* @par Implementation:
* The first pass of the algorithm is to generate a shadow map per light
* (depth map from the light point of view) by rendering the opaque objects
* with the OCCLUDER property keys.
* The second pass is to render the opaque objects with the RECEIVER keys.
*
* @sa
* vtkRenderPass, vtkOpaquePass
*/
#ifndef vtkShadowMapPass_h
#define vtkShadowMapPass_h
#include "vtkRenderingOpenGLModule.h" // For export macro
#include "vtkRenderPass.h"
class vtkOpenGLRenderWindow;
class vtkInformationIntegerKey;
class vtkCamera;
class vtkLight;
class vtkFrameBufferObject;
class vtkShadowMapPassTextures; // internal
class vtkShadowMapPassLightCameras; // internal
class vtkShaderProgram2;
class vtkImageExport;
class vtkTextureObject;
class vtkImplicitHalo;
class vtkSampleFunction;
class vtkShadowMapBakerPass;
class VTKRENDERINGOPENGL_EXPORT vtkShadowMapPass : public vtkRenderPass
{
public:
static vtkShadowMapPass *New();
vtkTypeMacro(vtkShadowMapPass,vtkRenderPass);
void PrintSelf(ostream& os, vtkIndent indent);
/**
* Perform rendering according to a render state \p s.
* \pre s_exists: s!=0
*/
virtual void Render(const vtkRenderState *s);
/**
* Release graphics resources and ask components to release their own
* resources.
* \pre w_exists: w!=0
*/
void ReleaseGraphicsResources(vtkWindow *w);
//@{
/**
* Pass that generates the shadow maps.
* the vtkShadowMapPass will use the Resolution ivar of
* this pass.
* Initial value is a NULL pointer.
*/
vtkGetObjectMacro(ShadowMapBakerPass,vtkShadowMapBakerPass);
virtual void SetShadowMapBakerPass(
vtkShadowMapBakerPass *shadowMapBakerPass);
//@}
//@{
/**
* Pass that render the opaque geometry, with no camera pass (otherwise
* it does not work with Ice-T).
* Initial value is a NULL pointer.
* Typically a sequence pass with a light pass and opaque pass.
* This should be the Opaque pass of the vtkShadowMapBakerPass without the
* vtkCameraPass.
*/
vtkGetObjectMacro(OpaquePass,vtkRenderPass);
virtual void SetOpaquePass(vtkRenderPass *opaquePass);
//@}
protected:
/**
* Default constructor. DelegatetPass is set to NULL.
*/
vtkShadowMapPass();
/**
* Destructor.
*/
virtual ~vtkShadowMapPass();
/**
* Build the intensity map.
*/
void BuildSpotLightIntensityMap();
/**
* Check if shadow mapping is supported by the current OpenGL context.
* \pre w_exists: w!=0
*/
void CheckSupport(vtkOpenGLRenderWindow *w);
vtkShadowMapBakerPass *ShadowMapBakerPass;
vtkRenderPass *CompositeRGBAPass;
vtkRenderPass *OpaquePass;
/**
* Graphics resources.
*/
vtkFrameBufferObject *FrameBufferObject;
vtkShadowMapPassTextures *ShadowMaps;
vtkShadowMapPassLightCameras *LightCameras;
vtkShaderProgram2 *Program;
vtkTextureObject *IntensityMap;
vtkSampleFunction *IntensitySource;
vtkImageExport *IntensityExporter;
vtkImplicitHalo *Halo;
vtkTimeStamp LastRenderTime;
private:
vtkShadowMapPass(const vtkShadowMapPass&) VTK_DELETE_FUNCTION;
void operator=(const vtkShadowMapPass&) VTK_DELETE_FUNCTION;
};
#endif