
|
Voici une petite présentation du moteur de jeu OGRE (Object-Oriented Graphics Rendering Engine).
Contrairement à Torque, OGRE est un moteur Open Source très documenté sur Internet
(manuels, tutorials, FAQ,…).
OGRE se veut être un moteur orienté objet. Il est portable puisqu'il peut utiliser
DirectX pour Windows mais aussi OpenGl pour d'autres plates-formes comme Linux.
Voici donc une brève présentation des classes les plus importantes avec quelques liens
qui vous permettront de vous servir d'OGRE pour faire votre propre jeu.
|
Fonctionnalités
OGRE supporte de nombreuses fonctionnalités avancées :
Matériaux/shaders :
- langage de description de matériaux permettant leur gestion en dehors du code source de l'application ;
- support des vertex et fragment programs (shaders) en assembleur, HLSL (DirectX), GLSL (OpenGL) et Cg (DirectX/OpenGL) ;
- multitexturage, rendu en passes multiples ;
- support des textures PNG, JPEG, TGA, BMP, DDS et DXT/S3TC ;
- support des textures modifiables en temps-réel (pour la vidéo notamment).
Modèles :
- interfaçage avec de nombreux outils 3D : Blender, Wings3D, 3D Studio Max, Maya, Milkshape3D et bientôt Softimage|XSI ;
- animation squelettique par images-clés, gestion des transitions entre animations, weight skinning, skinning hardware ;
- support des patches de Bézier pour les surfaces courbes ;
- support des modèles progressifs (LOD : level of détail).
Scènes :
- système flexible et hautement configurable de gestion de scènes, non lié à un type de scène unique ;
- plugins supportant divers types de scènes : BSP, Octree, Terrain, Nature, Paging ;
- gestion des scènes sous forme de scene graph hiérarchique ;
- support des ombres portées : shadow mapping, stencil shadows.
Effets spéciaux :
- système de particules, qui peut être géré dans des fichiers textes sous forme de scripts ;
- gestion du " pooling " de particules pour obtenir les meilleures performances ;
- support des skyboxes, skyplanes et skydomes pour le rendu du ciel ;
- support des billboards (images 2D toujours orientées vers l'observateur) ;
- gestion automatique de la transparence des objets (ordre de rendu et gestion du depth buffer).
Divers :
- système commun de gestion des ressources pour la gestion de la mémoire et le chargement de données à partir d'archives (ZIP, PK3) ;
- architecture basée sur les plugins permettant d'étendre le moteur en évitant la recompilation ;
- gestionnaire de mémoire permettant d'identifier les memory leaks en mode debug ;
- fournis avec de nombreux exemples mettant en oeuvre les différentes fonctionnalités de l'API et montrant l'interfaçage avec d'autres librairies (notamment ODE pour la physique/collision) ;
- fourni avec un outil permettant la conversion entre les formats binaires optimisés utilisés par OGRE et les formats d'échange et de stockage en XML utilisés par les outils de création.
Architecture
Diagramme UML (http://www.ogre3d.org/docs/manual/manual_4.html#SEC4) :

Root
Objet de base qui va permettre de faire les initialisations et d'entrer ensuite dans la boucle de rendu.
RenderSystem
Classe abstraite dont héritent les classes dérivées de rendu comme OpenGl, DirectX,...
On récupère un pointeur sur la bonne classe une fois l'initialisation effectuée (le code de la classe de rendu sera chargé à partir d'une Dll).
SceneManager
En fait, on ne manipule pas directement RenderSystem, mais on utilise plutôt SceneManager
qui va nous permettre de gérer une scène et ses ressources (textures,meshs,...bref tout
ce dont on a besoin pour faire un jeu).
Dans OGRE, il y a des classes plus spécialisées, donc adaptées à des cas particuliers pour de
meilleures performances. Le but de ces classes est de gérer des scènes particulières comme des
terrains avec un système BSP.
Le BSP (Binary Space Partition ) est une technique utilisée pour diviser un espace en régions.
Le plus souvent on utilise un arbre BSP ("Binary Space Partitioning Tree" ou "Arbre binaire pour
le partitionnement de l'espace") qui est une structure de données pour organiser des objets dans une map.
Ceci permet de déterminer dans quelle région se situe la caméra. Le but est d'optimiser le rendu temps réel
d'une map.
ResourceManager
Il s'agit d'une interface permettant la gestion des ressources. Il y a généralement une classe spécialisée pour chaque ressource (TextureManager, MeshManager,...).
Entity
Objet d'une scène qui peut (mais pas nécessairement) changer de position. Cette classe hérite de la classe MovableObject. Chaque objet de ce type est basé sur un mesh.
Materials
Un matériau est un ensemble de paramètres qui déterminent comment les objets de la scène doivent être rendus. Pour bien comprendre cette notion, il faut savoir que notre vision d'un objet est déterminée par son éclairage. Ce sont les zones d'ombres qui permettent à un objet de lui donner son aspect 3d. C'est le rôle du matériau qui va définir le type de lumière (ambiante, diffuse,...), la méthode d'ombrage (Gouraud par exemple) et d'autres paramètres (culling, mode de filtrage pour les textures,...).
Overlay
Classe permettant le rendu d'éléments en 2d et en 3d afin de créer des interfaces de type GUI ou HUD.
Le rendu se fait par dessus tous les autres objets dans une scène.
On peut créer une instance de la classe overlay avec la méthode SceneManager::createOverlay ou bien par script.
Scripts
Comme la plupart des moteurs 3d, OGRE offre la possibilité d'utiliser des fichiers de scripts ou l'on peut définir plus rapidement certains éléments du moteur (matériaux, mesh, overlay, particules,...).
Ce langage de scripts offre en fait peu de fonctionnalités comparé à d'autres langages que vous pouvez intégrer vous-même à OGRE :
- LUA
- Python
- GameMonkey
- AngelScript
Référez-vous au manuel en ligne pour plus d'informations :
http://www.ogre3d.org/docs/manual/manual_15.html#SEC24
Moteur physique
Dans des temps où la physique prend de plus en plus d'importance dans les jeux, il est heureux de constater qu'il
existe un plug-in pour OGRE permettant d'interfacer plus facilement le moteur avec ODE (le moteur physique Open Source le plus connu).
OGREODE :
www.green-eyed-monster.com

OGREODE encapsule ODE dans du code objet. Pour l'utiliser, il faut d'abord initialiser le monde avec les paramètres habituels d'ODE (gravité, ERP, CFM,...).
Ensuite, vous pouvez créer un Corps (Body) que l'on associe un à noeud (class Node sous OGRE).
Vous pouvez associez un mesh à votre Node. Ensuite, il faudra attribuer une masse à votre corps puis vous pourrez gérer les collisions entre objet via la méthode Collide.
Il ne s'agit que d'une très brève description mais sachez que si vous connaissez déjà ODE, il vous sera très facile de comprendre OGREODE, qui n'ajoute rien de plus à part une couche objet :-).
Référez vous au site officiel et surtout aux exemples fournis avec le projet pour plus d'information.
Quelques adresses :
J'espère que cette petite introduction vous aura donné envie d'aller plus loin. Voici quelques adresses intéressantes sur OGRE :
Site officiel :
http://www.ogre3d.org
Manuel :
http://www.ogre3d.org/docs/manual/
Tutorial :
http://www.ogre3d.org/docs/Tutorials/
FAQ :
http://www.ogre3d.org/wiki/index.php/Frequently_asked_questions
Site français :
http://ogre3d.free.fr
|