Retour
Version Originale

./aip/1.8aipmod/source/Irrlicht/CShadowVolumeSceneNode.h :


// Copyright (C) 2002-2011 Nikolaus Gebhardt

// This file is part of the "Irrlicht Engine".

// For conditions of distribution and use, see copyright notice in irrlicht.h


#ifndef __C_SHADOW_VOLUME_SCENE_NODE_H_INCLUDED__
#define __C_SHADOW_VOLUME_SCENE_NODE_H_INCLUDED__

#include "IShadowVolumeSceneNode.h"

namespace irr
{
namespace scene
{

	//! Scene node for rendering a shadow volume into a stencil buffer.

	class CShadowVolumeSceneNode : public IShadowVolumeSceneNode
	{
	public:

		//! constructor

		CShadowVolumeSceneNode(const IMesh* shadowMesh, ISceneNode* parent, ISceneManager* mgr, 
			s32 id,  bool zfailmethod=true, f32 infinity=10000.0f);

		//! destructor

		virtual ~CShadowVolumeSceneNode();

		//! 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);

		//! Updates the shadow volumes for current light positions.

		virtual void updateShadowVolumes();

		//! pre render method

		virtual void OnRegisterSceneNode();

		//! renders the node.

		virtual void render();

		//! returns the axis aligned bounding box of this node

		virtual const core::aabbox3d<f32>& getBoundingBox() const;

		//! Returns type of the scene node

		virtual ESCENE_NODE_TYPE getType() const { return ESNT_SHADOW_VOLUME; }

	private:

		typedef core::array<core::vector3df> SShadowVolume;

		void createShadowVolume(const core::vector3df& pos);
		void createZPassVolume(s32 faceCount, u32& numEdges, core::vector3df light, SShadowVolume* svp, bool caps);
		void createZFailVolume(s32 faceCount, u32& numEdges, const core::vector3df& light, SShadowVolume* svp);

		//! Generates adjacency information based on mesh indices.

		void calculateAdjacency();

		core::aabbox3d<f32> Box;

		// a shadow volume for every light

		core::array<SShadowVolume> ShadowVolumes;

		core::array<core::vector3df> Vertices;
		core::array<u16> Indices;
		core::array<u16> Adjacency;
		core::array<u16> Edges;
		// used for zfail method, if face is front facing

		core::array<bool> FaceData;

		const scene::IMesh* ShadowMesh;

		u32 IndexCount;
		u32 VertexCount;

		u32 ShadowVolumesUsed;

		f32 Infinity;

		bool UseZFailMethod;
	};

} // end namespace scene

} // end namespace irr


#endif
Options Liens officiels Caractéristiques Statistiques Communauté
Corrections
irrlicht
irrklang
irredit
irrxml
xhtml 1.0
css 2.1
Propulsé par FluxBB
Traduit par FluxBB.fr
881 membres
1427 sujets
11117 messages
Dernier membre inscrit: Bidule
21 invités en ligne
Aucun membre connecté
RSS Feed