VTK
|
00001 /*========================================================================= 00002 00003 Program: Visualization Toolkit 00004 Module: $RCSfile: vtkShadowMapPass.h,v $ 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 vtkTypeRevisionMacro(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 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 // vtkImageGaussianSource *IntensitySource; 00166 vtkSampleFunction *IntensitySource; 00167 vtkImageExport *IntensityExporter; 00168 vtkImplicitHalo *Halo; 00169 00170 vtkTimeStamp LastRenderTime; 00171 00172 private: 00173 vtkShadowMapPass(const vtkShadowMapPass&); // Not implemented. 00174 void operator=(const vtkShadowMapPass&); // Not implemented. 00175 }; 00176 00177 #endif