Scena: Design et architecture
Classes
Voici une (petite) partie de la hiérarchie de classes:

Instanciation
Scena dispose d'un mécanisme d'instanciation qui permet de partager
des données entre plusieurs duplicats d'un même objet. Ainsi,
comme dans 3DS Max, les multiples instances d'un même Mesh partageront
une même géométrie (les même Index et Vertex Buffers
par exemple), mais avec une Frame parente et des propriétés
de rendu différentes.
Hierarchie de Frames
Les objets de la classe Frame permettent de positionner les autres objets
dans l'espace. Il s'agit en fait de simples repères. Un objet Frame
contient trois matrices: une matrice de transformation locale (LTM), une matrice
de transformation du monde (WTM), et une matrice de vue en espace camera (VTM).
Le calcul de ces matrices se fait de façon récursive en suivant
la hierarchie de Frames jusqu'à la racine. De plus, ce calcul est effectué
par évaluation paresseuse (quand il est nécessaire uniquement).
Animation
Le mécanisme d'animation de Scena est fortement inspiré du
concept de "Controller" de 3DS Max. Ainsi, il est possible d'associer
des fonctions du temps à certains champs de certains objets. Il est
par exemple possible de modifier en fonction du temps la matrice de transformation
locale d'une Frame (pour déplacer un objet) ou encore de faire varier
la couleur ou le rayon d'une lumière en fonction du temps (pour accompagner
une explosion par exemple).
Spatialisation
Le terme spatialisation, désigne l'organisation spatiale des objets
graphiques permettant d'effectuer rapidement (càd non linéairement)
les opérations de culling de scène.
La gestion de la spatialisation est abstraite du point de vue du coeur du
moteur. En effet, une classe abstraite SpatialStructure sert d'interface aux
structures spatiales. Définir une structure spatiale passe par l'implémentation
des opérations d'insertion et de suppression de Renderable, ainsi
que des opérations d'intersection avec un Frustum(celui d'une camera
ou une lumière), avec une sphère et avec une OBB.
Il est alors possible d'utiliser différentes structures comme des
Kd-Tree, des octree, des systèmes par portails, etc...
Indépendance vis-à-vis
de la plate-forme
L'indépendance vis-à-vis de la plate-forme est garantie par
le caractère abstrait de certaines classes (Renderer, RenderTarget)
qui disposent d'une implémentation concrète par plate-forme
(par exemple D3DRenderer, D3DRenderTarget). Par ailleurs le design pattern
Bridge est utilisé dans plusieurs cas pour ne pas faire interférer
les deux axes de spécialisation (spécialisation de la plate-forme
et spécialisation du comportement). C'est le cas des classes Mesh et
Texture qui utilisent les classes MeshImpl et TextureImpl.
Renderer et Render State
management
Les RenderState sont des objets encapsulant les informations décrivant
l'état dans lequel doit être le Renderer avant d'effectuer
le rendu d'un Renderable. L'intérêt des RenderState
est l'ordre(total) qu'il est possible de définir sur l'ensemble de
ces états. Il est alors possible de trier les Renderable d'après
leur RenderState, afin de minimiser les coûts de changement d'état
lors du rendu de la scène.
Sauvegarde / lecture sur
disque
Les Packages sont des conteneurs de meshes, lumières, cameras, controllers
d'animation, matériaux, etc... Les Packages peuvent être utilisés
pour stocker tout une scène, ou un ensemble cohérent de ressources
(un véhicule dans un jeu par exemple). Les Packages sont directement
enregistrables et lisibles sur le disque via les fichiers .pkg.
Export Max
Un plugin pour Flexporter (l'excellent plugin Max d'export développé
par Pierre Terdiman) permet d'exporter des fichiers packages (.pkg) depuis
3DS Max 3 et 4.
Explorer
Package Explorer est l'outil permettant de visualiser les scènes contenues
dans un fichier package et d'explorer l'arborescence de données de
ce package.
Il permettra prochainement l'édition du contenu d'un Package.
D3D8: Vertex Shaders
D3D8: Vertex et Index Buffers