00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00045 #ifndef __vtkShadowMapBakerPass_h
00046 #define __vtkShadowMapBakerPass_h
00047
00048 #include "vtkRenderPass.h"
00049
00050 class vtkOpenGLRenderWindow;
00051 class vtkInformationIntegerKey;
00052 class vtkCamera;
00053 class vtkLight;
00054 class vtkFrameBufferObject;
00055 class vtkShadowMapBakerPassTextures;
00056 class vtkShadowMapBakerPassLightCameras;
00057
00058 class VTK_RENDERING_EXPORT vtkShadowMapBakerPass : public vtkRenderPass
00059 {
00060 public:
00061 static vtkShadowMapBakerPass *New();
00062 vtkTypeMacro(vtkShadowMapBakerPass,vtkRenderPass);
00063 void PrintSelf(ostream& os, vtkIndent indent);
00064
00068 static vtkInformationIntegerKey *OCCLUDER();
00069
00070
00071
00072
00073 static vtkInformationIntegerKey *RECEIVER();
00074
00075
00077
00079 virtual void Render(const vtkRenderState *s);
00080
00082
00085 void ReleaseGraphicsResources(vtkWindow *w);
00086
00088
00092 vtkGetObjectMacro(OpaquePass,vtkRenderPass);
00093 virtual void SetOpaquePass(vtkRenderPass *opaquePass);
00095
00097
00101 vtkGetObjectMacro(CompositeZPass,vtkRenderPass);
00102 virtual void SetCompositeZPass(vtkRenderPass *compositeZPass);
00104
00106
00109 vtkSetMacro(Resolution,unsigned int);
00110 vtkGetMacro(Resolution,unsigned int);
00112
00114
00122 vtkSetMacro(PolygonOffsetFactor,float);
00123 vtkGetMacro(PolygonOffsetFactor,float);
00125
00127
00136 vtkSetMacro(PolygonOffsetUnits,float);
00137 vtkGetMacro(PolygonOffsetUnits,float);
00139
00143 bool GetHasShadows();
00144
00149 bool LightCreatesShadow(vtkLight *l);
00150
00151
00154 vtkShadowMapBakerPassTextures *GetShadowMaps();
00155
00157
00159 vtkShadowMapBakerPassLightCameras *GetLightCameras();
00160
00162
00167 bool GetNeedUpdate();
00168
00169
00170
00171
00172
00173
00174 void SetUpToDate();
00175
00176 protected:
00178 vtkShadowMapBakerPass();
00179
00181 virtual ~vtkShadowMapBakerPass();
00182
00184
00187 void PointNearFar(double *v,
00188 double *pt,
00189 double *dir,
00190 double &mNear,
00191 double &mFar,
00192 bool initialized);
00194
00196
00198 void BoxNearFar(double *bb,
00199 double *pt,
00200 double *dir,
00201 double &mNear,
00202 double &mFar);
00204
00205
00207
00209 void BuildCameraLight(vtkLight *light,
00210 double *boundingBox,
00211 vtkCamera *lcamera);
00212
00214
00217 void CheckSupport(vtkOpenGLRenderWindow *w);
00218
00219 vtkRenderPass *OpaquePass;
00220
00221 vtkRenderPass *CompositeZPass;
00222
00223 unsigned int Resolution;
00224
00225 float PolygonOffsetFactor;
00226 float PolygonOffsetUnits;
00227
00228 bool HasShadows;
00229
00231 vtkFrameBufferObject *FrameBufferObject;
00232
00233 vtkShadowMapBakerPassTextures *ShadowMaps;
00234 vtkShadowMapBakerPassLightCameras *LightCameras;
00235
00236
00237 vtkTimeStamp LastRenderTime;
00238 bool NeedUpdate;
00239
00240 private:
00241 vtkShadowMapBakerPass(const vtkShadowMapBakerPass&);
00242 void operator=(const vtkShadowMapBakerPass&);
00243 };
00244
00245 #endif