00001 00002 #ifndef __PAINTERSTENCIL_H 00003 #define __PAINTERSTENCIL_H 00004 00005 #include "Vector.h" 00006 00007 #include "Mesh.h" 00008 #include "Triangle.h" 00009 00010 #include "Painter.h" 00011 00012 class PainterStencil: public Painter { 00013 public: 00018 enum StencilTest { Z_FAIL, Z_PASS }; 00019 00020 private: 00021 int m_lightHandle; 00022 StencilTest m_stencilTest; 00023 00024 bool m_showShadowVolume; 00025 float m_extrusionFactor; 00026 00036 void paintShadowVolumeCaps(const Model& model, const Vector& light) const; 00037 00056 void paintShadowVolumeSides(const Model& model, const Vector& light) const; 00057 00122 void paintShadowVolume(const Model& model, const Vector& light) const; 00123 00124 public: 00125 PainterStencil(int lightHandle, StencilTest test = Z_PASS, bool show = false); 00126 00127 virtual void paintModel(const Model& model, const Vector& eye, const Vector& light) const; 00128 }; 00129 00130 #endif // __PAINTERSTENCIL_H