Hello sa fait un baille que j'ai pas poster une ressource x), donc j'ai mit au point mon système de frustrum culling en me basant sur celui de tmyke concrètement cela sert a masquer les node non visible et donc de gagner du frame rate
///--------------------------------------------------------------------------------
/// @file FrustrumCulling.hpp
/// @brief Technique de culling par masquage d'objet non visible
///--------------------------------------------------------------------------------
#ifndef __FRUSTRUMCULLING_HPP_INCLUDED__
#define __FRUSTRUMCULLING_HPP_INCLUDED__
#include "Plane.hpp"
#include <irrlicht.h>
namespace App { namespace Engine { namespace Culling {
///--------------------------------------------------------------------------------
/// Technique de culling par masquage d'objet non visible
///--------------------------------------------------------------------------------
class FrustrumCulling
{
public:
///--------------------------------------------------------------------------------
/// Constructeur
///
/// @param _SceneManager : Gestionnaire de scene
///--------------------------------------------------------------------------------
FrustrumCulling(irr::scene::ISceneManager * _SceneManager);
///--------------------------------------------------------------------------------
/// Destructeur
///--------------------------------------------------------------------------------
~FrustrumCulling();
///--------------------------------------------------------------------------------
/// Pour crée le culling
///--------------------------------------------------------------------------------
void Create();
///--------------------------------------------------------------------------------
/// Pour recrée le culling
///--------------------------------------------------------------------------------
void Recreate();
///--------------------------------------------------------------------------------
/// Pour mettre a jour le culling
///--------------------------------------------------------------------------------
void Update();
///--------------------------------------------------------------------------------
/// Pour ajouter un scene node
///
/// @param _SceneNode : Pointeur vers le scene node
///--------------------------------------------------------------------------------
void AddSceneNode(const irr::scene::ISceneNode * _SceneNode);
///--------------------------------------------------------------------------------
/// Pour supprimer un scene node
///
/// @param _SceneNode : Pointeur vers le scene node
///--------------------------------------------------------------------------------
void RemoveSceneNode(const irr::scene::ISceneNode * _SceneNode);
///--------------------------------------------------------------------------------
/// Pour tester si une box et visible
///
/// @param _Box : Box a tester
///--------------------------------------------------------------------------------
bool IsVisible(const irr::core::aabbox3d<irr::f32>& box);
private:
///--------------------------------------------------------------------------------
/// Gestionnaire de scene
///--------------------------------------------------------------------------------
irr::scene::ISceneManager * m_SceneManager;
///--------------------------------------------------------------------------------
/// Pour stocker les nodes
///--------------------------------------------------------------------------------
irr::core::array<irr::scene::ISceneNode *> m_Nodes;
///--------------------------------------------------------------------------------
/// Pour tester si un node est visible
///--------------------------------------------------------------------------------
App::Core::Plane m_FrustumPlane[6];
///--------------------------------------------------------------------------------
/// Dernier / derniere position et cible de la camera
///--------------------------------------------------------------------------------
irr::core::vector3df m_LastPosition, m_LastTarget;
};
} // Culling
} // Engine
} // App
#endif // __FRUSTRUMCULLING_HPP_INCLUDED__
///--------------------------------------------------------------------------------
/// @file Plane.hpp
/// @brief Plane pour les test
///--------------------------------------------------------------------------------
#ifndef __FPLANE_HPP_INCLUDED__
#define __FPLANE_HPP_INCLUDED__
#include <math.h>
namespace App { namespace Core {
///--------------------------------------------------------------------------------
/// Plane pour les test
///--------------------------------------------------------------------------------
class Plane
{
public:
///--------------------------------------------------------------------------------
/// Constructeur
///--------------------------------------------------------------------------------
Plane();
///--------------------------------------------------------------------------------
/// Constructeur
///
/// @param _a : Point a
/// @param _b : Point b
/// @param _c : Point c
/// @param _d : Point d
///--------------------------------------------------------------------------------
Plane(float _a, float _b, float _c, float _d);
///--------------------------------------------------------------------------------
/// Operateur de soustraction
///
/// @param _Other : Autre Plan
///--------------------------------------------------------------------------------
Plane operator-(const Plane& _Other) const;
///--------------------------------------------------------------------------------
/// Operateur d'addition
///
/// @param _Other : Autre Plan
///--------------------------------------------------------------------------------
Plane operator+(const Plane& _Other) const;
///--------------------------------------------------------------------------------
/// Operateur de tableau
///
/// @param _I : Index
///--------------------------------------------------------------------------------
float operator[](unsigned _I) const;
///--------------------------------------------------------------------------------
/// Pour normaliser le plan
///--------------------------------------------------------------------------------
void Normalize();
///--------------------------------------------------------------------------------
/// Retourne l'addition de la multiplication des 4 point par une valeur
///
/// @param _V : Facteur de multiplication
///--------------------------------------------------------------------------------
float DotCoord(float *_V);
///--------------------------------------------------------------------------------
/// Point a
///--------------------------------------------------------------------------------
float a;
///--------------------------------------------------------------------------------
/// Point b
///--------------------------------------------------------------------------------
float b;
///--------------------------------------------------------------------------------
/// Point c
///--------------------------------------------------------------------------------
float c;
///--------------------------------------------------------------------------------
/// Point d
///--------------------------------------------------------------------------------
float d;
};
} // Engine
} // App
#endif // __FPLANE_HPP_INCLUDED__
Hello sa fait un baille que j'ai pas poster une ressource x), donc j'ai mit au point mon système de frustrum culling en me basant sur celui de tmyke concrètement cela sert a masquer les node non visible et donc de gagner du frame rate
///--------------------------------------------------------------------------------
/// @file FrustrumCulling.hpp
/// @brief Technique de culling par masquage d'objet non visible
///--------------------------------------------------------------------------------
#ifndef __FRUSTRUMCULLING_HPP_INCLUDED__
#define __FRUSTRUMCULLING_HPP_INCLUDED__
#include "Plane.hpp"
#include <irrlicht.h>
namespace App { namespace Engine { namespace Culling {
///--------------------------------------------------------------------------------
/// Technique de culling par masquage d'objet non visible
///--------------------------------------------------------------------------------
class FrustrumCulling
{
public:
///--------------------------------------------------------------------------------
/// Constructeur
///
/// @param _SceneManager : Gestionnaire de scene
///--------------------------------------------------------------------------------
FrustrumCulling(irr::scene::ISceneManager * _SceneManager);
///--------------------------------------------------------------------------------
/// Destructeur
///--------------------------------------------------------------------------------
~FrustrumCulling();
///--------------------------------------------------------------------------------
/// Pour crée le culling
///--------------------------------------------------------------------------------
void Create();
///--------------------------------------------------------------------------------
/// Pour recrée le culling
///--------------------------------------------------------------------------------
void Recreate();
///--------------------------------------------------------------------------------
/// Pour mettre a jour le culling
///--------------------------------------------------------------------------------
void Update();
///--------------------------------------------------------------------------------
/// Pour ajouter un scene node
///
/// @param _SceneNode : Pointeur vers le scene node
///--------------------------------------------------------------------------------
void AddSceneNode(const irr::scene::ISceneNode * _SceneNode);
///--------------------------------------------------------------------------------
/// Pour supprimer un scene node
///
/// @param _SceneNode : Pointeur vers le scene node
///--------------------------------------------------------------------------------
void RemoveSceneNode(const irr::scene::ISceneNode * _SceneNode);
///--------------------------------------------------------------------------------
/// Pour tester si une box et visible
///
/// @param _Box : Box a tester
///--------------------------------------------------------------------------------
bool IsVisible(const irr::core::aabbox3d<irr::f32>& box);
private:
///--------------------------------------------------------------------------------
/// Gestionnaire de scene
///--------------------------------------------------------------------------------
irr::scene::ISceneManager * m_SceneManager;
///--------------------------------------------------------------------------------
/// Pour stocker les nodes
///--------------------------------------------------------------------------------
irr::core::array<irr::scene::ISceneNode *> m_Nodes;
///--------------------------------------------------------------------------------
/// Pour tester si un node est visible
///--------------------------------------------------------------------------------
App::Core::Plane m_FrustumPlane[6];
///--------------------------------------------------------------------------------
/// Dernier / derniere position et cible de la camera
///--------------------------------------------------------------------------------
irr::core::vector3df m_LastPosition, m_LastTarget;
};
} // Culling
} // Engine
} // App
#endif // __FRUSTRUMCULLING_HPP_INCLUDED__
///--------------------------------------------------------------------------------
/// @file Plane.hpp
/// @brief Plane pour les test
///--------------------------------------------------------------------------------
#ifndef __FPLANE_HPP_INCLUDED__
#define __FPLANE_HPP_INCLUDED__
#include <math.h>
namespace App { namespace Core {
///--------------------------------------------------------------------------------
/// Plane pour les test
///--------------------------------------------------------------------------------
class Plane
{
public:
///--------------------------------------------------------------------------------
/// Constructeur
///--------------------------------------------------------------------------------
Plane();
///--------------------------------------------------------------------------------
/// Constructeur
///
/// @param _a : Point a
/// @param _b : Point b
/// @param _c : Point c
/// @param _d : Point d
///--------------------------------------------------------------------------------
Plane(float _a, float _b, float _c, float _d);
///--------------------------------------------------------------------------------
/// Operateur de soustraction
///
/// @param _Other : Autre Plan
///--------------------------------------------------------------------------------
Plane operator-(const Plane& _Other) const;
///--------------------------------------------------------------------------------
/// Operateur d'addition
///
/// @param _Other : Autre Plan
///--------------------------------------------------------------------------------
Plane operator+(const Plane& _Other) const;
///--------------------------------------------------------------------------------
/// Operateur de tableau
///
/// @param _I : Index
///--------------------------------------------------------------------------------
float operator[](unsigned _I) const;
///--------------------------------------------------------------------------------
/// Pour normaliser le plan
///--------------------------------------------------------------------------------
void Normalize();
///--------------------------------------------------------------------------------
/// Retourne l'addition de la multiplication des 4 point par une valeur
///
/// @param _V : Facteur de multiplication
///--------------------------------------------------------------------------------
float DotCoord(float *_V);
///--------------------------------------------------------------------------------
/// Point a
///--------------------------------------------------------------------------------
float a;
///--------------------------------------------------------------------------------
/// Point b
///--------------------------------------------------------------------------------
float b;
///--------------------------------------------------------------------------------
/// Point c
///--------------------------------------------------------------------------------
float c;
///--------------------------------------------------------------------------------
/// Point d
///--------------------------------------------------------------------------------
float d;
};
} // Engine
} // App
#endif // __FPLANE_HPP_INCLUDED__