Yet another Lite 3D Engine to release

Aller sur Tweened.org

Je mettrai en ligne courant de l’été une première release de la librairie Tweened. Celle-ci contient notamment, des composants, des behaviors, un wrapper de tween (facilitant la conception d’animation par code) ainsi qu’un mini moteur 3D très simple d’utilisation. En voici un exemple concret accessible ici et téléchargeable là.
J’ai fais ce moteur avant tout pour des besoins personnels et afin de me remémorer les mathématiques projectives. Réinventer la poudre ne fais quelques fois pas de mal. L’idée est surtout de fournir une dll de moins de 40ko qui permet de faire de la 3D. Celle-ci sera utilisable pour les designers à travers Blend ou dans Visual Studio via C#.  Elle concentrera très vite toutes les fonctionnalités de base réellement utiles et que nous n’avons pas  actuellement via Blend : Caméra 3D, Container 3D, Scène 3D, détection des normales et z sorting intelligent (plus malin et performant que celui actuellement proposé dans Blend). J’y ajoute une classe utilitaire facilitant l’utilisation de mathématiques projectives.

Voilà ces composants :

  1. Un conteneur de type Scene3D (hérite de Panel).
    Tous les objets placés en sont sein voient leur propriétés Projection native lockée. Ceux-ci peuvent utilisées les propriétés attachées suivantes :

    • Scene3D.LocalOffsetX
    • Scene3D.LocalOffsetY
    • Scene3D.LocalOffsetZ
    • Scene3D.GlobalOffsetX
    • Scene3D.GlobalOffsetY
    • Scene3D.GlobalOffsetZ
    • Scene3D.RotationX
    • Scene3D.RotationY
    • Scene3D.RotationZ

    Ils sont associés à une instance de type Element3D. Celle-ci est récupérable (lorsque l’événement StartUp de la scène 3d est diffusé) via une méthode d’extension ajoutées pour les instances d’UIElement (GetElement3D).

  2. Une caméra associée au conteneur Scene3D. Celle-ci offre les propriétés suivantes :
    • FieldOfView
    • Plan de clipping proche : NearPlane
    • Plan de clipping éloigné : FarPlane
    • Point de fuite (XVanishingPoint, YVanishingPoint)
    • Déplacement (OffsetXCamera, OffsetYCamera, OffsetZCamera)
    • Rotation (RotateXCamera, RotateYCamera, RotateZCamera)

Détection du changement de direction de la normale (Backface culling) et du produit scalaire via les événements NormalDirectionChanged et DotProductChanged. Ces événements sont diffusés par les instances de type Element3D.

Je suis en cours de finition d’un algorithme de tri des profondeurs. Ce moteur devrait être assez optimisé car son rendu ne repose pas sur un DispatcherTimer. Deplus, le pipeline de rendu est assez optimisé car il n’est pas récursif par défaut. Lorsqu’un seul objet est modifié, ce dernier invoque en interne une méthode RenderElement. A contrario, lorsque la scène ou la caméra sont modifiées, il devient récursif et met à jour l’ensemble des objets de la scène… A bientôt donc pour la release finale de la librairie Tweened…

Bookmark and Share

Répondre