Scena: Design et architecture
  
  
 Classes
 Classes
  Voici une (petite) partie de la hiérarchie de classes: 
  
   Instanciation
 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
 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
 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
 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
 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
 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
 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
 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
 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 Shaders
   
   D3D8: Vertex et Index Buffers
 D3D8: Vertex et Index Buffers