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

  FORUM HardWare.fr
  Programmation

  [OpenGL] Pb avec intersections

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[OpenGL] Pb avec intersections

n°113529
Mikvix
Posté le 18-03-2002 à 12:45:47  profilanswer
 

Yop !
 
Dans mon app Opengl, je trace un terrain 3d obtenu à partir d'une image en niveau de gris ... j'ai donc un petit tas de triangles qui représente un terrain ... ça c'est bon ...
 
MAIS lorsque je veux tracer un simple plan (l'eau) , qui coupe ce terrain, les intersections sont trés laides ...
 
Y a pas quelqu'un qui saurait pourquoi ???

mood
Publicité
Posté le 18-03-2002 à 12:45:47  profilanswer
 

n°113533
chrisbk
-
Posté le 18-03-2002 à 12:56:20  profilanswer
 

a priori, je te dirais Z-Fighting, autrement dit ton Z-buffer est pu assez precis et ca rend un truc ignoble
 
Solution : passer en Z-B 32bpp, et augmenter la tesselation

n°113534
youdontcar​e
Posté le 18-03-2002 à 13:01:01  profilanswer
 

ou ton ratio zfar / znear est trop grand (en éxagérant 100000 / 0.00001f), ton terrain est contenu en z [100, 200], donc seulement un tout petit bout de l'ensemble de déf du zbuffer est alloué pour ton terrain.

n°113535
Mikvix
Posté le 18-03-2002 à 13:03:12  profilanswer
 

Merci !

n°113744
Mikvix
Posté le 18-03-2002 à 17:50:27  profilanswer
 

comment ça s'utilise glDepthRange ?
j'ai essayé de changer les valeurs mais je n'obtiens rien de bien mieux ;(

n°113746
Mikvix
Posté le 18-03-2002 à 17:51:35  profilanswer
 

comment ça s'utilise glDepthRange ?
j'ai essayé de changer les valeurs mais je n'obtiens rien de bien mieux ;(
comment je dois choisir mes valeurs ?

n°113757
youdontcar​e
Posté le 18-03-2002 à 18:18:31  profilanswer
 

tu donnes quoi comme valeurs ? il faut minimiser le ratio zfar / znear.  
 
ce sont les coordonnées z dans le repère caméra, si ton terrain fait 100 de long, tu peux essayer (5, 200) par ex.  
 
je dis ça au pif, essaye ;)

n°113867
Mikvix
Posté le 18-03-2002 à 22:09:03  profilanswer
 

mon terrain est centré sur 0, et il fait 256 de large au total (de -128 à +128).

n°113890
youdontcar​e
Posté le 18-03-2002 à 22:46:14  profilanswer
 

youdontcare a écrit a écrit :

tu donnes quoi comme valeurs ?


n°113959
Mikvix
Posté le 19-03-2002 à 08:28:53  profilanswer
 

j'ai testé tout un tas de valeurs ...
j'ai mis dans les (0,3000) (0,100), (0.1,1) (1,1) (1,250) etc ...
enfin bref, j'ai testé plein de truc :)

mood
Publicité
Posté le 19-03-2002 à 08:28:53  profilanswer
 

n°114017
Mikvix
Posté le 19-03-2002 à 10:54:25  profilanswer
 

arf c'est trop laid !

n°114036
youdontcar​e
Posté le 19-03-2002 à 11:09:08  profilanswer
 

déjà il ne faut pas mettre 0 en znear mais au moins un entier strictement positif.
 
pour le reste, je suis à court d'idées - ça fait ça sur tous les programmes opengl ? ou juste sur le tien ? tu as essayé les exemples sur http://nehe.gamedev.net/ ?

n°114043
LeGreg
Posté le 19-03-2002 à 11:15:35  profilanswer
 

deja il faudrait qu'il nous explique pourquoi  
c'est laid.. t'as pas un screenshot a nous montrer?
ou une description un chouai plus precise?
 
LEGREG

n°114051
Mikvix
Posté le 19-03-2002 à 11:37:05  profilanswer
 

j'ai fait un bon tas de tutos sur Nehe, et j'ai jamais eu à m'occuper de ce probleme ...
 
en fait, si tu veux avoir une idée de ce qui me pose probleme, tu prends le tutorial 35 de Nehe (le terrain, justement :)) et tu traces un plan qui le coupe (symbolisant l'eau) ...
 
je pense que tu auras le meme probleme que ce que j'obtiens.
 
Je peux pas faire de screenshot, j'ai pas accés à mon programme ici ...  
 
pour décrire le probleme, je dirais que l'intersection entre l'eau et le terrain est ultra simplifiée ... au lieu de faire un truc bien net, ça fait des "escaliers" ... une sorte d'approximation de l'intersection ... et si je me souviens bien, en zoomant les intersections s'améliorent ... lorsque je fais des rotations autours du terrain, les intersections ne sont pas "stables" ... ça ne peux venir que du z-buffer je pense ...
 
dans mon programme, je trace le terrain, puis ensuite l'eau ... si je regle le z-near à plus de 0, l'eau recouvre toujours le terrain ... à 0 le terrain est visible mais les intersections approximatives.
 
Voilà :)
Merci beaucoup pour votre aide !!

n°114112
LeGreg
Posté le 19-03-2002 à 14:02:51  profilanswer
 

sincerement j'ai autre chose a faire qu'aller voir les exemples de Nehe qui sont souvent pas super bien codes ;).
Deja une valeur de 0 pour le Z-Near
est une erreur et sera reportee comme telle
par ton driver openGL. en gros pour un ZNear de 0,
toute ta geometrie serait applatie en une seule valeur du
zbuffer. certains drivers ont le comportement precite,
d'autres detectent l'erreur et considere que tu as fait
une NOOP.
 
ce qu'il faut que tu saches c'est que
ton z-buffer n'est pas lineaire en Z malgre ce que semble indiquer son nom.
le Z-buffer comme implante par la plupart des constructeurs
de carte video est concu pour une chose: offrir le plus
de precision pour la resolution du Z-Fighting à proximite de l'observateur. Ce qui est tout a fait logique: Un objet pres, devrait prendre plus de place sur l'ecran et les artefacts devraient etre plus visibles, donc on preserve la precision pour les objets les plus pres. Mais quand 90% des valeurs utilisees par ton z-Buffer se retrouvent dans 10% de ton espace et que tu n'as evidemment que 65536 valeurs possibles, tu te rends bien compte que ca laisse tres peu de precision possible pour
les objets situes dans les 90% de ton espace restant.
 
Tu as donc plusieurs solutions, que tu peux combiner:
- diminuer l'importance de l'espace proche, en eloignant le zNear tout en conservant ton zfar (qui doit etre le plus proche possible tout en evitant le clipping de tes polygones trop eloignes). Le mieux c'est d'experimenter jusqu'a ce que tu aies la precision desiree.
- Augmenter le nombre de valeurs que peut prendre ton z-buffer. Si en passant de 16bits (65536 valeurs) a 24 bits (16Millions de valeurs) voire 32bits (4 Milliards de valeurs) ne regle rien c'est que tu as fait une erreur ailleurs et que changer la resolution du zbuffer ne reglera rien.
- Utiliser le Zbuffer pour regler l'ordre relatif des objets et regler les cas d'intersections d'objets eloignes a la main. mais ca ne reglera pas tous les problemes de z-fighting.
- passer au W-Buffer si ton hardware le permet. La repartition des valeurs sera uniforme sur ton espace donc attention a la precision des intersections pour les objets les plus proches!
 
A+
LEGREG


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

  [OpenGL] Pb avec intersections

 

Sujets relatifs
[Pascal + openGL] Comment on fait ?[OPENGL] Optimisations
OpenGL[openGL + VC++] Pb avec WM_MOUSEWHEEL ????
OpenGL/DelphiPosition clickée dans une fenetre openGL
Caméra dans OpenGL sous Delphi ?[opengl / 3DS max ]
[OpenGL] Pixel Shaders ?probleme de compilation opengl sous linux
Plus de sujets relatifs à : [OpenGL] Pb avec intersections


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