Bonjour,
Je me suis mis à la 3D sur java avec la librairie LWJGL il y a quelques jours,
ayant déjà programmé un jeu en C# avec la librairie XNA, je me suis dis que cela serait pas trop dur, MAIS,
l'openGL c'est pas facile, je viens donc demander,
J'ai actuellement créé un petit monde 3D avec une fort belle caméra type celle de minecraft qui peut donc ce déplacer dans tout les sens. Mon but étant de pouvoir modifier mon terrain point par point pendant le jeu,
j'ai donc besoin de développer un Ray Picking pour transformer le point 2D de ma souris en un point 3D.
Après deux jours de recherches sur notre amis Google, je n'ai rien trouvé qui pouvais réellement m'aider autre que de la théorie plutôt vague où des cours sur les matrices qui ne mènent à rien.
Je me tourne donc vers vous, pour trouver une personne maitrisant l'openGL capable de m'expliquer comment faire.
J'ai actuellement à ma disposition:
les positions X, Y, Z de ma caméra,
les rotations X, Y Z de cette même caméra.
je ne vois pas comment a partir de ça tracer un "trait" jusqu'à collision avec un objet.
voila j'espère avoir été assez précis.
Merci.
Vous auriez dû jeter un coup d’œil dans les exemples de Nehe avec LWJGL, l'un d'eux traite le picking, j'en parle ici. Le problème, c'est que les développeurs de cette bibliothèque ont refusé ma correction, il comporte un bogue qui est corrigé dans cet exemple utilisant le concurrent de LWJGL.
Je vous conseille de poser vos questions sur le forum officiel de LWJGL ou sur son canal IRC, vous obtiendrez peu de réponses sur JavaFR à ce sujet. De plus, OpenGL est une API de bas niveau au même titre que Direct3D alors que XNA est une API de plus haut niveau. Attendez-vous à ce que ce soit plus délicat à apprendre. Si vous cherchez vraiment une API de plus haut niveau, tournez-vous plutôt vers Ardor3D ou JMonkeyEngine 3.0. Si vous voulez progresser en OpenGL, je vous conseille de lire au moins le Red Book. Ne vous cantonnez surtout pas aux ressources en français en informatique. Bon courage.
P.S : J'ai hésité à répondre à votre question. Je suis responsable du support des moteurs pour la fondation qui gère le concurrent de LWJGL et ce n'est normalement pas à moi de vous donner un coup de main mais à eux.
Bonjour,
je vous remercie de votre réponse, je souhaiterais rester sur du bas niveau car c'est fondamental pour ma formation et j'utilise LWJGL parce que c'est le seul que j'ai trouve pour faire de la 3D mais si vous avez une autre API vers laquelle me diriger, je suis toujours preneur.
Et pour Nehe j'avais déjà regardé, et le problème c'est le que picking suite a la rotation de la camera ne fonctionnait plus correctement.
Je vous remercie, je vais me pencher tout de meme sur toutes ces documentations pour essayer de developper mon picking fait maison.
Dans ce cas, il fallait réparer le picking en comprenant pourquoi il ne fonctionnait plus après rotation de la caméra.
L'utilisation du picking OpenGL n'est pas recommandée, les fonctions nécessaires sont mal implémentés dans les pilotes depuis plusieurs années et posent parfois de très gros problèmes de performances notamment quand vous utilisez des shaders GLSL. Le color picking ne marche pas du tout sur les ordinateurs qui simulent une partie de leurs palettes de couleurs. C'est pourquoi les moteurs 3D en Java qui utilisent des bindings d'OpenGL optent plutôt pour une implémentation logicielle du picking sans OpenGL, c'est notamment le cas d'Ardor3D. C'est assez facile à implémenter avec un simple lancé de rayon dans un maillage décomposé en triangles pour simplifier les calculs.
Vous avez tout à fait raison de commencer par bien comprendre les couches les plus basses, cela permet d'être plus à l'aise, plus autonome et plus productif avec des outils de plus haut niveau par la suite. Ayez le réflexe de regarder dans le man quand vous voulez comprendre ce que fait une fonction OpenGL, la documentation des bindings Java d'OpenGL et OpenGL-ES y fait référence.