rendu sans context graphique
Forum Programmation : rendu sans context graphique
Bonjour,
Je travaille sur un projet qui consiste à:
"En indiquant à l’outil le point de vue désiré, le champ de vue, ainsi que la taille n*m en pixels, l’utilisateur pourra obtenir une image de rendu qui comprendra le numéro de face à laquelle appartient chaque pixel.
Ce résultat sera stocké dans un fichier texte".
En fait cet outil doit s'executer en mode batch, on lui rentre les renseignements et il me renvoit un fichier texte avec pour chaque pixel le numero de face de l'objet auquel il appartient. On m'a parlé d'une fonction de MESAGL, pbuffer qui ferait exactement ca (un rendu sans context graphique) mais j'avoue ne pas connaitre grand chose a MESA.
Si quelqu'un peut me renseigner ou bien me proposer une autre solution.
N.B: ne peut on pas tout simplement utiliser un buffer d'openGL??
merci d'avance
Tu peut faire le calcul toi même ce n'est que de la géométrie 3d.
MESAGL c'est la version d'openGL sous linux.
Avec OpenGL il existe des fonction pour savoir si un pixel appartient à une face.
Il te suffit de balayyer tous les point.
Installe les examples du RedBook qui montrent comment faire.
j'avais déjà tenté une méthode qui consistait à faire une sorte de lancer de rayon (picking) mais c'est super long comme temps de calcul. Je vais continuer de chercher dans les fonctions d'opengl, pour voir si je trouve mon bonheur.
Merci :-D
le lancer de rayon n'est pas trop lent.
Tu as juste à balayer les rayons du point d'origine vers le pixel courant de l'écran, apres un petit calcul mathématique te donne le point d'intersection P avec un plan.
Et pour savoir si le point est dans le polygone, tu peux calculer le produit vectoriel (PA,PB), puis (PB,PC) ... (P [N], P[N+1]) puis (P[N+1], PA).
Et tu vérifie que tous ces points sont dans le meme sens (produits scalaires > 0).
Sinon en openGL, c'est sûr on peut le faire. Je m'en suis servi pour le clic de souris.
Je te revois encore sur le redBook
Plus précisément l'exemple pickdepth qui utilise une fonction GLU: gluPickMatrix ()
qui avec un glRenderMode(GL_RENDER); permet de calculer le rendu (la sélection en fait)
l'exemple pickdepth est exactement le code dont je me sert pour le lancer de rayon et c'est celui ci qui est super long (il faut savoir que mes scenes 3D sont énormes)
c'est pour cette raison que je souhaite utiliser un buffer
Je pense que tu ne pourra pas aller plus vite que cette fonctionnalité opengl, car le calcul est effectué en faisant un rendu.
http://www.opengl.org/resources/tutorials/sig99/advanced99/notes/node35.html
Quand tu lances un rendu pour la sélection, opengl passe des vecteurs aux fragments vers les primitives, mais ne génère pas les fragments. Bref, tout ça est optimisé.
Il faut savoir que si les jeux n'utilisent pas le ray tracing, c'est parce que les calculs sont long à effectuer. Alors je ne sais pas ce que tu fais de ce lancer de rayon (ou combien tu en fais), mais si c'est complexe, ne t'attend pas à avoir tu temps réel...
Il y a 1776 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Par allstar27 il y a 4 jours :