Merging r5975 through r6036 from trunk to ogl-es branch.
GLES drivers adapted, but only did make compile-tests. git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/branches/ogl-es@6038 dfc29bdd-3216-0410-991c-e03cc46cb475
This commit is contained in:
65
include/IShadowVolumeSceneNode.h
Normal file
65
include/IShadowVolumeSceneNode.h
Normal file
@@ -0,0 +1,65 @@
|
||||
// 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 __I_SHADOW_VOLUME_SCENE_NODE_H_INCLUDED__
|
||||
#define __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
|
||||
|
Reference in New Issue
Block a user