Qu'est-ce que OpenGL® Picking?
La sélection OpenGL® en programmation informatique est le processus permettant de déterminer quel objet d'une scène tridimensionnelle (3D) est situé à un point donné de l'écran une fois la scène rendue. Il peut également faire référence à la localisation de plusieurs objets en un point ou à l'intérieur d'une boîte. Le plus souvent, la sélection OpenGL® est utilisée pour déterminer quel objet 3D sur l'écran un utilisateur tente de sélectionner avec un curseur de souris. Bien que cette opération puisse sembler simple, il existe plusieurs subtilités dans la manière dont OpenGL® restitue une scène pouvant la rendre assez complexe. En outre, certaines cartes graphiques et certains pilotes présentent des problèmes intrinsèques qui peuvent entraîner l’échec de la fonction de sélection OpenGL® et renvoyer de faux résultats.
Lorsqu'un utilisateur regarde une scène 3D sur un écran d'ordinateur, l'image résultante est appelée un rendu de la scène. La scène est en fait stockée dans la mémoire sous forme de collection de formes primitives ou de polygones, qui ne sont eux-mêmes que des collections de points 3D dans l’espace de la scène. L'ordinateur utilise les coordonnées du monde, parfois appelées coordonnées absolues, pour exécuter la plupart des fonctions de base permettant de manipuler des objets dans la scène. Dans la plupart des applications, l'utilisateur peut manœuvrer la vue de la scène sous différents angles pour que les objets puissent être vus sous différentes perspectives. L'emplacement virtuel de l'utilisateur dans la scène s'appelle l'angle de la caméra ou la position de la caméra.
La complexité de la sélection OpenGL® provient de la détermination de l'emplacement de la souris sur l'écran bidimensionnel (2D) à partir d'une position et d'un angle éventuellement arbitraires dans la scène, la position de la caméra. De plus, étant donné que le rendu du visualiseur humain est réellement 2D, l'utilisateur n'a aucun moyen de fournir la profondeur du clic de souris à l'intérieur de la scène. La fonction de sélection OpenGL® résout ce problème complexe de deux manières.
La première est qu'au lieu d'effectuer une série de calculs séparés pour traduire où le spectateur se trouve de manière abstraite, puis de trouver un objet dans la fenêtre de rendu, la fonction restitue la scène comme elle le fait normalement, à l'exception du rendu utilisé pour que la sélection ne soit pas affichée, il est uniquement utilisé pour calculer les positions correctes des objets. La différence est qu'au lieu de rendre toute la zone visible à l'utilisateur, elle ne restitue que la zone où se trouve la souris. Cela signifie que tous les objets rendus se trouvent techniquement au point où se trouve le pointeur de la souris.
Le deuxième problème, à savoir ne pas avoir le moyen d'indiquer la profondeur d'une zone sélectionnée, est résolu en renvoyant tous les objets situés sous les coordonnées de la souris dans la scène. La fonction de sélection OpenGL® renvoie tous les objets d'un tableau avec leur distance par rapport à l'emplacement de la visionneuse. Cela permet à un programme de trouver rapidement l’objet le plus proche, s’il le souhaite.
Une façon de visualiser la sélection OpenGL® consiste à imaginer une ligne, parfois appelée rayon dans la programmation 3D, qui passe de l'emplacement du pointeur de la souris à la scène et s'éloigne de l'emplacement du spectateur. Chaque objet touché par ce rayon est ajouté à un tableau d'objets, ainsi qu'à la distance qui le sépare du spectateur. Ceci est une explication très simple du fonctionnement d’une forme de prélèvement OpenGL®.
Une autre méthode de sélection d’objets dans OpenGL® consiste à localiser un objet par couleur, ce qui peut être considérablement plus rapide. Cette méthode restitue la scène mais, au lieu d'appliquer un éclairage et une texture aux objets, ceux-ci sont restitués avec une seule couleur simple. Chaque objet ou groupe d'objets a sa propre couleur. La scène est uniquement rendue en mémoire et non affichée. Cela n’affecte donc pas ce que l’utilisateur voit. Au lieu de rechercher des collisions 3D entre des objets, la couleur au niveau de la position du curseur de la souris est renvoyée et cette couleur est corrélée à un objet spécifique.