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 vtkTypeRevisionMacro(vtkShadowMapPass,vtkRenderPass);
00067 void PrintSelf(ostream& os, vtkIndent indent);
00068
00072 static vtkInformationIntegerKey *OCCLUDER();
00073
00074
00075
00076
00077 static vtkInformationIntegerKey *RECEIVER();
00078
00081 virtual void Render(const vtkRenderState *s);
00082
00085 void ReleaseGraphicsResources(vtkWindow *w);
00086
00088
00091 vtkGetObjectMacro(OpaquePass,vtkRenderPass);
00092 virtual void SetOpaquePass(vtkRenderPass *opaquePass);
00094
00096
00099 vtkSetMacro(Resolution,unsigned int);
00100 vtkGetMacro(Resolution,unsigned int);
00102
00104
00112 vtkSetMacro(PolygonOffsetFactor,float);
00113 vtkGetMacro(PolygonOffsetFactor,float);
00115
00117
00126 vtkSetMacro(PolygonOffsetUnits,float);
00127 vtkGetMacro(PolygonOffsetUnits,float);
00129
00130 protected:
00132 vtkShadowMapPass();
00133
00135 virtual ~vtkShadowMapPass();
00136
00141 void BuildCameraLight(vtkLight *light, vtkCamera *camera);
00142
00144 void BuildSpotLightIntensityMap();
00145
00148 void CheckSupport(vtkOpenGLRenderWindow *w);
00149
00150 vtkRenderPass *OpaquePass;
00151 unsigned int Resolution;
00152
00153 float PolygonOffsetFactor;
00154 float PolygonOffsetUnits;
00155
00157 vtkFrameBufferObject *FrameBufferObject;
00158
00159 vtkShadowMapPassTextures *ShadowMaps;
00160 vtkShadowMapPassLightCameras *LightCameras;
00161 vtkShaderProgram2 *Program;
00162
00163 vtkTextureObject *IntensityMap;
00164
00165
00166 vtkSampleFunction *IntensitySource;
00167 vtkImageExport *IntensityExporter;
00168 vtkImplicitHalo *Halo;
00169
00170 vtkTimeStamp LastRenderTime;
00171
00172 private:
00173 vtkShadowMapPass(const vtkShadowMapPass&);
00174 void operator=(const vtkShadowMapPass&);
00175 };
00176
00177 #endif