Irrlicht déclare bien entendu énormément de classes, de structure, d'énumérations, etc... qui lui sont propres. Mais il redéfinit aussi une bonne partie des types de données natifs du langage C++ (int, long, etc...). De plus, il propose d'autres types basiques qui sont indispensables à l'utilisation du moteur. Regardons-y de plus près :
Types natifs
Pour des raisons de compatibilité maximale, Irrlicht encapsule les types natifs du C++. Ainsi quelle que soit la plateforme sur laquelle on compile et les APIs bas niveau utilisées, le code source sera compatible sans devoir changer quoi que ce soit. Voici une liste des types de variables de base les plus courants utilisés par Irrlicht :
- c8 : caractère sur 8 bits
- s8 : entier signé sur 8 bits
- u8 : entier non-signé sur 8 bits
- s16 : entier signé sur 16 bits
- u16 : entier non-signé sur 16 bits
- f32 : flottant sur 32 bits
- s32 : entier signé sur 32 bits
- u32 : entier non-signé sur 32 bits
- f64 : flottant sur 64 bits
Couleur
Je rappelle brièvement pour ceux qui ne le savent pas déjà que la couleur est la plupart du temps définie en informatique par la notation
RGB [31-4]. C'est à dire que n'importe quelle couleur est définie par la combinaison des trois couleurs de base :
rouge,
vert et
bleu. Plus une quatrième composante
alpha correspondant à la transparence.
Irrlicht propose donc une classe permettant d'exprimer une couleur dans une seule variable au lieu de 4. Il s'agit de
irr::video::SColor [doc], que nous avons déjà croisé dans la boucle de rendu. Cette classe stocke les composantes de manière ARGB, c'est à dire que la transparence se trouve avant le rouge, puis le vert, puis le bleu. Le code suivant permet de créer une variable contenant une couleur :
Code : C++ | irr::video::SColor color(0, 255, 255, 255);
|
Ici nous avons une variable color contenant un blanc totalement transparent. Pour avoir un bleu pur totalement opaque, il faut donner les valeurs suivantes :
Code : C++ | irr::video::SColor color(255, 0, 0, 255);
|
Vecteurs 2D
Un vecteur représente une direction, un déplacement
[52-1]. Graphiquement un vecteur 2D ressemble à ce qui est visible sur le graphique de droite. Cet exemple montre un vecteur ayant pour valeurs 1 en
X (l'axe des abscisses) et 1 en
Y (l'axe des ordonnées).
La classe définie par Irrlicht pour contenir les deux valeurs d'un vecteur en deux dimensions est
irr::core::vector2d<T> [doc]. Vous aurez reconnu le template qui nous permet d'utiliser quasiment n'importe quel type de base vu plus haut pour les valeurs. Pour créer le vecteur du graphique de droite par exemple, il suffit d'utiliser le code suivant :
Code : C++ | irr::core::vector2d<irr::u32> vec(1, 1);
|
Et pour l'avoir en nombres flottants, le code suivant :
Code : C++ | irr::core::vector2d<irr::f32> vec(1.0f, 1.0f);
|
Étant donné qu'un vecteur est défini par deux valeurs, une sur chaque axe, la classe vector2d est parfaite pour stocker des coordonnées. Les opérations entre vecteurs et coordonnées sont ainsi simplifiées, et l'utilisation de la classe est sensiblement la même quel qu'en soit la nture du contenu. À chaque fois qu'on a besoin de spécifier la position d'un node par exemple, on utilise un vecteur (3D).
Vecteurs 3D
Le principe est exactement le même que pour les vecteurs 2D sauf qu'on rajoute une dimension, donc un axe, donc une valeur. Visuellement le vecteur (1, 1, 1) donne ce qui est visible sur les graphiques ci-dessous :
La classe en question est
irr::core::vector3d<T> [doc]. Elle fonctionne de la même manière que
vector2d. Ce qui veut dire que le code suivant permet d'obtenir le vecteur (1, 1, 1) :
Code : C++ | irr::core::vector3d<irr::u32> vec(1, 1, 1);
|
La plupart du temps, Irrlicht requiert des valeurs en nombre flottant concernant les vecteurs. Cela permet plus de précision, notamment pour indiquer des coordonnées. On utilise les vecteurs 3d en flottant tellement souvent qu'un typedef a été mis en place pour éviter d'avoir à taper vector3d<irr::f32>. Il s'agit de vector3df. Pour indiquer le vecteur ci-dessus en nombre flottant, il suffit donc de faire :
Code : C++ | irr::core::vector3df vec(1.0f, 1.0f, 1.0f);
|