VTK
dox/Rendering/vtkShadowMapPass.h
Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    vtkShadowMapPass.h
00005 
00006   Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
00007   All rights reserved.
00008   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
00009 
00010      This software is distributed WITHOUT ANY WARRANTY; without even
00011      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
00012      PURPOSE.  See the above copyright notice for more information.
00013 
00014 =========================================================================*/
00043 #ifndef __vtkShadowMapPass_h
00044 #define __vtkShadowMapPass_h
00045 
00046 #include "vtkRenderPass.h"
00047 
00048 class vtkOpenGLRenderWindow;
00049 class vtkInformationIntegerKey;
00050 class vtkCamera;
00051 class vtkLight;
00052 class vtkFrameBufferObject;
00053 class vtkShadowMapPassTextures; // internal
00054 class vtkShadowMapPassLightCameras; // internal
00055 class vtkShaderProgram2;
00056 class vtkImageGaussianSource;
00057 class vtkImageExport;
00058 class vtkTextureObject;
00059 class vtkImplicitHalo;
00060 class vtkSampleFunction;
00061 
00062 class VTK_RENDERING_EXPORT vtkShadowMapPass : public vtkRenderPass
00063 {
00064 public:
00065   static vtkShadowMapPass *New();
00066   vtkTypeMacro(vtkShadowMapPass,vtkRenderPass);
00067   void PrintSelf(ostream& os, vtkIndent indent);
00068 
00072   static vtkInformationIntegerKey *OCCLUDER();
00073 
00074   // If this key exists on the Propertykeys of a prop, the prop is viewed as a
00075   // light/shadow receiver. This key is not mutually exclusive with the
00076   // OCCLUDER() key.
00077   static vtkInformationIntegerKey *RECEIVER();
00078 
00079   //BTX
00081 
00083   virtual void Render(const vtkRenderState *s);
00084   //ETX
00086 
00089   void ReleaseGraphicsResources(vtkWindow *w);
00090 
00092 
00095   vtkGetObjectMacro(OpaquePass,vtkRenderPass);
00096   virtual void SetOpaquePass(vtkRenderPass *opaquePass);
00098 
00100 
00103   vtkGetObjectMacro(CompositeZPass,vtkRenderPass);
00104   virtual void SetCompositeZPass(vtkRenderPass *opaquePass);
00106 
00108 
00111   vtkSetMacro(Resolution,unsigned int);
00112   vtkGetMacro(Resolution,unsigned int);
00114 
00116 
00124   vtkSetMacro(PolygonOffsetFactor,float);
00125   vtkGetMacro(PolygonOffsetFactor,float);
00127 
00129 
00138   vtkSetMacro(PolygonOffsetUnits,float);
00139   vtkGetMacro(PolygonOffsetUnits,float);
00141 
00142  protected:
00144   vtkShadowMapPass();
00145 
00147   virtual ~vtkShadowMapPass();
00148 
00149   //BTX
00151 
00154   void BuildCameraLight(vtkLight *light, double *boundingBox, vtkCamera *lcamera);
00155   //ETX
00157 
00159   void BuildSpotLightIntensityMap();
00160 
00163   void CheckSupport(vtkOpenGLRenderWindow *w);
00164 
00165   vtkRenderPass *OpaquePass;
00166   vtkRenderPass *CompositeZPass;
00167   unsigned int Resolution;
00168 
00169   float PolygonOffsetFactor;
00170   float PolygonOffsetUnits;
00171 
00173   vtkFrameBufferObject *FrameBufferObject;
00174 
00175   vtkShadowMapPassTextures *ShadowMaps;
00176   vtkShadowMapPassLightCameras *LightCameras;
00177   vtkShaderProgram2 *Program;
00178 
00179   vtkTextureObject *IntensityMap;
00180 
00181 //  vtkImageGaussianSource *IntensitySource;
00182   vtkSampleFunction *IntensitySource;
00183   vtkImageExport *IntensityExporter;
00184   vtkImplicitHalo *Halo;
00185 
00186   vtkTimeStamp LastRenderTime;
00187 
00188 private:
00189   vtkShadowMapPass(const vtkShadowMapPass&);  // Not implemented.
00190   void operator=(const vtkShadowMapPass&);  // Not implemented.
00191 };
00192 
00193 #endif