Unité uGBEUtils3D - gbegreg/GBE3D GitHub Wiki

Unité uGBEUtils3D.pas

Cette unité contient des méthodes qui sont utilisées par les composants de la suite GBE3D mais que vous pouvez également utiliser dans vos programmes. Elle regroupe donc diverses méthodes utilitaires.

Méthode Barycentre

function Barycentre(p1, p2, p3 : TPoint3D; p4 : TPointF):single;

Cette méthode permet de calculer la hauteur d'un point de l'espace en fonction des coordonnées de 3 autres points. L'interpolation utilisée est la méthode des barycentres (Barycentric coordinate system).

Elle renvoie un single qui correspond à la hauteur calculée.

Cette méthode est utilisée par la méthode CalculerHauteur qui permet d'avoir la hauteur d'une position donnée en fonction des 3 sommets du triangle composant la maille.

Méthode CalculerHauteur

function CalculerHauteur(Mesh : TMesh; P: TPoint3D; miseAEchelle : single; sizeMap : integer) : single;

Cette méthode permet de calculer la hauteur de la maille du Mesh à la position P. Les deux autres paramètres sont:

miseAEchelle un single qui correspond à la mise à l'échelle (hauteur de la maille calculée rapportée à la hauteur du Mesh). Le composant TGBEHeightmap dispose de l'attribut fMiseAEchelle qui permet d'avoir ce rapport.
sizeMap un integer qui correspond au nombre de maille par ligne du maillage.

Méthode SizeOf3D

function SizeOf3D(const unObjet3D: TControl3D): TPoint3D;

Cette méthode renvoie dans un TPoint3D les dimensions de l'objet 3D passé en paramètre. Cette méthode est utilisée ensuite par les méthodes de gestion des collisions par exemple.

Méthode DetectionCollisionObstacle

function DetectionCollisionObstacle(mesh : TMesh; objet : TControl3D):TGBECollisionRetour;

Cette méthode utilise la technique du "bounding box" (Wikipedia) pour déterminer s'il y a collision entre un Mesh et un objet 3D. Cette méthode de détection de collision n'est pas très précise mais elle est simple et rapide.

Cette méthode est faite pour déterminer s'il y a eu collision entre objet et un enfant du mesh qui aurait sa propriété tag à 1. Plus précisément, vous devez placer un TDummy avec sa propriété tag à 1 et de lui associer tous les objets 3D à considérer comme obstacle en tant qu'enfant de ce TDummy. Ainsi, automatiquement, tous les objets enfants de ce TDummy seront considérés comme des obstacles.

La méthode renvoie true s'il y a collision, false sinon.

Méthode interactionIHM

procedure interactionIHM(viewport : TViewport3D);

Cette méthode prend en paramètre un TViewport3D et va rechercher dans ces enfants tous les objets TAnimation. Il va alors leur forcer un ProcessTick afin de ne pas bloquer les animations pendant les actions de l'utilisateur.

Méthode collisionDummyChilds

function collisionDummyChilds(aDummy: TDummy; objet3D : TControl3D): TGBECollisionRetour;

Cette méthode prend en paramètre un TDummy et un TControl3D. Elle va retourner un TGBECollisionRetour qui va indiquer s'il y a collision entre l'objet3D et les enfants du TDummy.

Méthode collisionEntre2Objets

function collisionEntre2Objets(objet1, objet2 : TControl3D): TGBECollisionRetour;

Cette méthode prend en paramètre deux TControl3D. Elle va retourner un TGBECollisionRetour qui va indiquer s'il y a collision entre les deux objet3D.

⚠️ **GitHub.com Fallback** ⚠️