diff options
Diffstat (limited to 'include/IShadowVolumeSceneNode.h')
-rw-r--r-- | include/IShadowVolumeSceneNode.h | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/include/IShadowVolumeSceneNode.h b/include/IShadowVolumeSceneNode.h new file mode 100644 index 0000000..7f661cd --- /dev/null +++ b/include/IShadowVolumeSceneNode.h @@ -0,0 +1,64 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt
+// This file is part of the "Irrlicht Engine".
+// For conditions of distribution and use, see copyright notice in irrlicht.h
+
+#ifndef IRR_I_SHADOW_VOLUME_SCENE_NODE_H_INCLUDED
+#define IRR_I_SHADOW_VOLUME_SCENE_NODE_H_INCLUDED
+
+#include "ISceneNode.h"
+
+namespace irr
+{
+namespace scene
+{
+ class IMesh;
+
+ enum ESHADOWVOLUME_OPTIMIZATION
+ {
+ //! Create volumes around every triangle
+ ESV_NONE,
+
+ //! Create volumes only around the silhouette of the mesh
+ /** This can reduce the number of volumes drastically,
+ but will have an upfront-cost where it calculates adjacency of
+ triangles. Also it will not work with all models. Basically
+ if you see strange black shadow lines then you have a model
+ for which it won't work.
+ We get that information about adjacency by comparing the positions of
+ all edges in the mesh (even if they are in different meshbuffers). */
+ ESV_SILHOUETTE_BY_POS
+ };
+
+ //! Scene node for rendering a shadow volume into a stencil buffer.
+ class IShadowVolumeSceneNode : public ISceneNode
+ {
+ public:
+
+ //! constructor
+ IShadowVolumeSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id)
+ : ISceneNode(parent, mgr, id) {}
+
+ //! Sets the mesh from which the shadow volume should be generated.
+ /** To optimize shadow rendering, use a simpler mesh for shadows.
+ */
+ virtual void setShadowMesh(const IMesh* mesh) = 0;
+
+ //! Updates the shadow volumes for current light positions.
+ virtual void updateShadowVolumes() = 0;
+
+ //! Set optimization used to create shadow volumes
+ /** Default is ESV_SILHOUETTE_BY_POS. If the shadow
+ looks bad then give ESV_NONE a try (which will be slower).
+ Alternatively you can try to fix the model, it's often
+ because it's not closed (aka if you'd put water in it then
+ that would leak out). */
+ virtual void setOptimization(ESHADOWVOLUME_OPTIMIZATION optimization) = 0;
+
+ //! Get currently active optimization used to create shadow volumes
+ virtual ESHADOWVOLUME_OPTIMIZATION getOptimization() const = 0;
+ };
+
+} // end namespace scene
+} // end namespace irr
+
+#endif
|