VTK
|
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