Il pourait etre bien d'avoir une FAQ sur Ogre.Quelles question voudriez vous voir dans cette FAQ?Je pourais tenter d'y repondre.
Generalité
Qu'est-ce que Ogre ?
Ogre (Object-oriented Graphics Rendering Engine) est moteur 3d, comme Irrlicht par exemple. Ogre n’est pas un moteur de jeux comme Crystale Space, il ne s’occupe que de la partie graphique.
Quels sont les intérêts d'utiliser Ogre ?
Ogre est Open-Source(et donc gratuit),il est mutli-platforme (Windows,Linux,Mac).
Ogre est programmé en c++, mais il possède des binding pour C#, python, java, Delphi,VB.NET).
Ogre supporte sans distinction OpenGl et DirectX ce qui permet de changer facilement de l’un a l’autre.
Côter Shader, Il supporte évidement les Vertex Shader et les Pixel Shader au format DirectX(HLSL), OpenGl(GLSL), ou Cg(format développé par Nvidia permettant de fonctionne sous DirectX ET OpenGl, ce qui évite de devoir réécrire les shader).
Ce n’est evidement qu’un infime partie des possibilités de Ogre.
Ogre est-il un moteur de jeux ?
Non, Ogre n’est pas un moteur de jeux. Pour gérer les évènement (clavier joystique), la physique, le son, le réseau, il faudra utiliser d’autres bibliothèques. Cependant, Ogre possède des wrappers de librairies comme PhysX , OgreAl, …
Pour la gestion des événements, les démos d’Ogre utilisent OIS.
Où trouver des tutoriels pour Ogre ?
Il existe quelques tutoriaux pour Ogre en français :
-http://ogre3d.fr/wiki/Accueil (fr)
-http://bauland.developpez.com/tutoriel/ogre/tutoriel1-debutant/ (fr) pas a jours
-http://gusgus.developpez.com/Ogre/ (fr)
Mais la majorité des tutoriaux se trouve en anglais sur site officiel :
-http://www.ogre3d.org/wiki/index.php/Main_Page (en)
-http://www.ogre3d.org/docs/manual/ (en)
-http://www.ogre3d.org/docs/api/html/ (en)
SceneNode et Transformation
Qu’est ce qu’un SceneNode ?
Les SceneNode sont des objets décrivant des transformations. On distingue trois types majeur je transformation : rotation, translation et changement d’échelle.
Chaque SceneNode est attaché a un SceneNode parent, dont il « hérite » des transformations.
Par exemple si le SceneNode parent a un rotation de 10° et le SceneNode fils une roation de -5°, l’objet attaché au SceneNode fils aura un rotation de 5°. Les transformations du SceneNode parent sont appliquées après celle du SceneNode fils.
Comment créer un SceneNode ?
Pour créer un SceneNode, il faut demander au SceneNode parent de créer un SceneNode comme ceci :
Node = pSceneNode-> createChildSceneNode ("nom du SceneNode", Vector3(0,0,0), Quaternion::IDENTITY);
Le paramètre 2 décrit la translation, le paramètre 3 la rotation, ces 2 paramètres étant facultatifs.
Pour créer un SceneNode dont le parent n’a pas de transformation(mise a part la projection pour avoir la perspective), on utilise cette fonction :
pSceneManager->getRootSceneNode()->createChildSceneNode(" nom ");
Comment effectuer une translation ?
Pour faire une rotation, on applique la fonction :
pSceneNode-> translate(Vector3(x,y,z)) ;
Comment effectuer une rotation ?
Pour les rotations, Ogre utilise les quaternions (voir FAQ). Pour effectuer la rotation définie par un quaternion, il faut utiliser la methode suivante :
1 2 3
| Quaternion pQuaternion ;
pSceneNode->rotate(pQuaternion) ; |
On peut aussi utiliser les angles d’Euler via les fonctions yaw, roll et pitch qui prennent comme argument un angle en radiant :
pSceneNode->roll(Degree(180)) ;
Comment effectuer une mise a l’echelle ?
Pour effectuer une mise à l’échelle on utilise la fonction scale :
pSceneNode->scale(Vector3(ScaleX,ScaleY,ScaleZ)) ;
Comment attacher un objet à un SceneNode ?
On peut attacher divers objet (comme la camera, ou une Entity) à un SceneNode. Ces objets se verront appliquer les transformations décrite par le SceneNode. Pour cela, on applique la suivante :
pSceneNode-> attachObject(objet_a_attacher) ;
le type de objet_a_attacher est MovableObject *.
Entity
Qu’est ce qu’une Entity ?
Une Entity est un objet pouvant être affiché. Il contient divers informations sur la géométrie de l’objet (sa mesh), mais il ne contient aucune information sur les transformations de l’objet, celles-ci sont contenues dans un SceneNode. En effet,chaque Entity est attaché a un SceneNode qui décrit les divers transformations appliquées a l’Entity.
Pour créer une Entity, on utilise la fonction suivante :
pSceneManager->createEntity( "nomEntity", "entity.mesh" );
Le premier argument correspond au nom de l’entité, le second au fichier qui contient les informations sur la géométrie au format utilisé Ogre, le .mesh .
Comment faire pour que l’Entity ait une ombre ?
On utilise la fonction :
pEntity->setCastShadows(true) ;
Quand on met la valeur a true, l’entity créer une ombre, a false elle n’en créer pas.
Comment rendre l’Entity invisible ?
Pour rendre l’entity invisible, on utilise la fonction
pEntity->setVisible(false) ;
A l’inverse, pour rendre l’Entity a nouveau visible, il suffit de rappeler la fonction avec la valeur true.
Problèmes courants
__imp__MessageBoxA@16
Si vous obtenez le message suivant:
unresolved external symbol __imp__MessageBoxA@16 referenced in function _dError
c’est que vous avez oublier de linker vers user32.lib.
LIBC.lib […]winMain@16
Si vous obtenez le message suivant :
LIBC.lib(wincrt0.obj) error Unresolved External Symbol _winMain@16 referenced in function _winMainCRTStartUp
c’est que vous avez créer un projet Win32 et que vous n’avez pas mis de winMain dans votre programme.
The application failed to initialize properly (0xc01500002)
Vous devez installer le service pack 1 pour Visual Studio 2005.
__declspec(dllimport)... Ogre::[…]
Vous avez oublier de lier avec OgreMain.lib .
cannot open include file : 'winres.h'
Il suffit de remplacer tous les 'winres.h' par 'winresrc.h' dans le fichier ressource.rc de votre application.
SceneManager
Qu’est ce qu’un SceneManager ?
« A scene is an abstract representation of what is shown in a virtual world »
Littéralement, une scene est une représentation abstraite de ce qui est montré dans le monde virtuel. On y trouve des modeles (des Entity), des lumières, une camera, etc. Un SceneManager contient en quelque sorte une scene. Il existe différents types de SceneManager, chacun étant adapté a un type de scene (par exemple, une scene a l’extérieur ou a l’intérieur n’auras pas la même représentation, et un SceneManager prévu pour l’extérieur ne seras pas très efficace dans un environnement clos).
Quelles sont les différents SceneManager ?
Ogre possède plusieurs type de SceneManager. Voici une liste non exhaustive de ses SceneManager :
Octree Scene Manager
Ce SceneManager est générique.
Terrain Scene Manager
Ce SceneManager est conçu pour les scènes extérieures et peut charger une highmap.
Paging Scene Manager (ogreaddons)
SceneManager conçu pour les scènes extérieurs, comme le Terrain Scene Manager, mais le terrain est « découpé » de manière a n’afficher que ce qui est nécessaire et d’améliorer les performances.
BSP Scene Manager
SceneManager utilisé pour les scènes intérieures.
Editable Terrain Manager
Similaire au Terrain Scene Manager a la différence qu’on peut éditer le terrain en temps réel
Pour une liste complète des SceneManager, reportez vous ici :
http://www.ogre3d.org/wiki/index.php...errain_Manager
Comment créer un SceneManager ?
Pour créer un SceneManager, il faut passer par Root et utiliser la fonction createSceneManager comme ceci :
pRoot->createSceneManager (ST_GENERIC);
Ou le paramètre désigne le type de SceneManager (ici le SceneManager générique).
Partager