00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
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;
00054 class vtkShadowMapPassLightCameras;
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
00075
00076
00077 static vtkInformationIntegerKey *RECEIVER();
00078
00079
00081
00083 virtual void Render(const vtkRenderState *s);
00084
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
00151
00154 void BuildCameraLight(vtkLight *light, double *boundingBox, vtkCamera *lcamera);
00155
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
00182 vtkSampleFunction *IntensitySource;
00183 vtkImageExport *IntensityExporter;
00184 vtkImplicitHalo *Halo;
00185
00186 vtkTimeStamp LastRenderTime;
00187
00188 private:
00189 vtkShadowMapPass(const vtkShadowMapPass&);
00190 void operator=(const vtkShadowMapPass&);
00191 };
00192
00193 #endif