Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1505 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  opengl

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

opengl

n°438268
mbibim
Posté le 24-06-2003 à 17:13:29  profilanswer
 

salut
 
je voudrais faire un programme en opengl qui permet d'afficher que les points visibles d'un maillage, à partir d'une position de caméra donnée.
Je dispose d'une liste de triangle, et de la liste de mes points.
Mon idée c'est trouver à partir de l'équation en 3D du plan correspondant à chaque face, et des coordonnées des points, de voir si il y a une intersection entre la droite qui par du point à la caméra et chaque face. Si cette intersection existe et est dans le triangle correspondant à la face traitée, alors le point est caché. Sinon on l'affiche.
Je sais pas si j'ai été clair, mais en fait je voudrais savoir ce que vous en pensez et s'il vous avez des suggestions.  
merci...
a+ MM

mood
Publicité
Posté le 24-06-2003 à 17:13:29  profilanswer
 

n°438278
Willyzekid
Posté le 24-06-2003 à 17:22:13  profilanswer
 

Ben tu as une fonction qui te permet d'afficher que ce qui est visible dans opengl (un truc à "setter" quelque part)...si j'ai bien compris ce que tu voulais faire.


---------------
Horizon pas Net, reste à la buvette!!
n°438305
Ace17
Posté le 24-06-2003 à 17:39:09  profilanswer
 

C'est de la detection de collision de base ca.
Le point testé est en P. La camera en M. Les trois points de ton triangle sont A, B, C. Ils forment le plan ABC.
 
Commence par déterminer l'intersection I de ABC et de MP (la formule est assez simple ).  
 
Ensuite il faut vérifier si le P et M sont du meme coté du plan ABC. Pour cela, tu calcules la normale N de ton plan avec un produit vectoriel et tu fais deux produits scalaires : N avec IP, et N avec IM. Si les signes sont les memes ca veut dire que M et P sont du meme coté de ABC, et que donc la face ne cache pas notre point.
 
Si ils ne sont pas du meme coté, il reste juste a vérifier si le point I appartient au triangle formé par ABC. Pour cela fais la somme des trois mesures angulaires (IA,IB), (IB,IC), (IC,IA). Si tu es dans le triangle, tu dois trouver 360 degrés. Si tu trouves moins, c'est que I n'est pas dans le triangle et donc la face ne cache pas le point.

n°438498
youdontcar​e
Posté le 24-06-2003 à 21:29:31  profilanswer
 

Je ferais ça bourrin : tu dessines ton objet pour remplir le zbuffer (il reste invisible si tu demandes un blending (one, one) avec une couleur noire par exemple). Ensuite, tu bidouilles suivant le degré de précision souhaité : afficher un sprite rond pour chaque vertex donnera parfois un bout de sprite non voulu sur un vertex caché, pour un point d'un pixel aucun problème : tu le dessines directement, avec un peu de zbias (glPolygonOffset()) s'il y a du zfight.

n°438913
mbibim
Posté le 25-06-2003 à 13:11:54  profilanswer
 

salut
 
merci pour vos suggestions. Je suis en train de chercher un algo qui permet de déterminer l'équation d'un plan à partir de trois points.
Si vous avez des idées, ou des adresses.
merci

n°438981
mbibim
Posté le 25-06-2003 à 14:09:45  profilanswer
 

je cherche aussi comment calculer l'équation d'un droite à partir de 2 points  
 
merci d'avance

n°439749
LeGreg
Posté le 26-06-2003 à 05:30:46  profilanswer
 

mbibim tu es en quelle classe?  
(j'demande juste pour savoir faut pas se sentir agressé ;))
 
Si tu as trois points A, B et C et leur coordonnées respectives
 
Alors tu as simplement l'equation du plan comme
l'ensemble des points tels que AM (vecteur)  
soit perpendiculaire a AB^AC (produit vectoriel)
pour savoir s'ils sont perpendiculaires, tu fais le produit
scalaire des deux et tu regardes si c'est egal à zero.
 
Tu remarqueras que si A, B et C sont colineaires ca ne marche pas. (AB^AC = 0 et tu ne peux pas definir de plan a partir de trois points colineaires)
 
De meme si tu as deux points A et B, et leurs coordonnées.
Alors la droite est l'ensemble des points M tels que
AM et AB sont colineaires.
En general on determine que deux vecteurs sont colineaires lorsque leur produit vectoriel est nul (en 3D).
c'est a dire AM^AB = 0 (le vecteur nul).
Tu vas donc avoir trois equations, mais il ne t'en faut que deux pour determiner une droite. Ce n'est pas surprenant: le systeme est surdeterminé et l'une des equations est liée aux deux autres par une simple relation lineaire.
Bien evidemment tu ne peux pas savoir a l'avance quelle equation eliminer. Tu peux prendre la troisieme sauf dans le cas particulier ou l'une des deux premieres equations est deja sous la forme 0 = 0.
 
A+
LeGreg


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  opengl

 

Sujets relatifs
opengl parties cachées[opengl] ai-je bien compris le radial blur ?
[OpenGL]Pourquoi ai je une fenetre grise !!! [résolu]probleme a la compilation pour afficher une fenetre avec SDL et opengl
[opengl] generer un paysage en bumpmappingOpenGL : Pourquoi c'est si lent (code complet fournit)
Kels bouquins/tuto pour commencer D3D/ OpenGL ?[OpenGL] Pb de noob - Vertex & Color inside
[C] opengl et reseau[openGL] j'ai acheté 3D Game Engine de Dave Eberly et je comprend rien
Plus de sujets relatifs à : opengl


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR