CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[OpenGL] profondeur réelle/affichée

dnob700
dnob700
Niveau 10
26 mai 2006 à 14:32:47

bonjour,

j´aimerais savoir s´il est possible avec OpenGL de dessiner des objets (en l´occurrence de simples GL_POINTS) de manière à ce que la profondeur utilisée dans le calcul du DepthBuffer ne soit pas la profondeur réelle de l´objet.

Je m´explique :

il y a sur mon écran des objets déjà dessinés. Et je veux rajouter un point aux coordonnées (x,y,z). Jusque là pas de problème.
Mais j´aimerais qu´il ait une certaine "priorité" dans le DepthBuffer, c´est à dire que la profondeur considéré pour ce point ne soit pas z, mais z moins quelque chose de manière à ce qu´il apparaisse devant d´autre objets qui se serait trouvé normalement à la même profondeur ou juste un peu devant. Mais sans pour autant se retrouver devant tout le reste (sinon je n´aurais pas besoin de DepthBuffer).

Tout cela en m´assurant qu´il soit dessiné à l´écran exactement comme s´il se trouvait réellement aux coordonnées (x,y,z).

J´espère avoir été assez précis sur mon problème. Si quelqu´un a une idée, je l´en remercie d´avance.

godrik
godrik
Niveau 30
26 mai 2006 à 14:42:09

pourquoi ne pas l´afficher en z-epsilon ? si epsilon est petit, il n´y aura pas de différence d´affichage et il passera devant un point situé en z.

Question HS: pour quel type de probleme voudrais tu faire cela ?

dnob700
dnob700
Niveau 10
26 mai 2006 à 15:01:08

Je ne veux pas modifier le z car le repère dans lequel j´affiche ces points peut avoir subi une rotation arbitraire. Et donc pour déterminer les coordonnées auquels il faut ajouter ou enlever quelque chose pour obtenir en pratique un z-epsilon j´aurais besoin de faire pas mal de trigonométrie.
Mais comme j´essaye d´avoir un truc performant la trigo est à proscrire je crois (ou en fait, toutes techniques qui me demanderait de faire des calculs su chaques points que je veux afficher (et il y en a beaucoup, à afficher souvent)).

Comme je suis en fait obligé pour choisir la couleur de l´affichage de calculer la profondeur affiché des points. J´avais pensé selon cette profondeur a activer ou désactiver le DepthBuffer, car en fait ce qu´il y a avant les points est une simple sphère (en fait un assemblage de polygone dont les points sont les sommets) et donc selon la profondeur je sais si oui ou non le points doit apparaitre devant le reste. Mais alors je doit faire un glBegin et un glEnd pour chaques points (car on ne peut pas changer les paramètre sinon) et c´est un gros gachis je crois.

Mais en écrivant ça il me vient à l´esprit que ce que je fait n´est pas terrible, car d´abord je dessine des GL_LINES ou GL_TRIANGLES pour faire l´enveloppe convexe de l´ensemble des points, puis je repasse avec des GL_POINTS pour dessiner les points eux-même.
Mais je n´ais pas trouvé de moyen de faire les deux en une fois. Mais peut-être que ce réglage existe non ?

Lapintade
Lapintade
Niveau 30
26 mai 2006 à 19:02:22

Pour cela tu as deux methodes :

1/ Modifier legerement les valeurs de far/near clip planes. Ca a pour effet de changer la correspondance entre le Z de tes point et les valeurs stockées dans le Z buffer

2/ Utiliser un offset en Z. Ca existe en directX, ca doit exister aussi en opengl.

Lapintade
Lapintade
Niveau 30
26 mai 2006 à 19:05:25

godrik : on utilise souvent ca dans les jeu car ca arrive que des polygones soit physiquement au meme endroit (imagine une voiture, et tu colle des stickers dessus). Il ne faut pas que les polygones soit trop separés et en meme temps il ne faut pas que le test en Z soit fait au meme endroit car avec les imprecisions de calculs t´aura un pixel d´une face et un pixel de l´autre en alternance. C´est le "Z fighting" et c´est moche.

dnob > Cette page decrit la solution je pense : (offset en z)

http://www.opengl.org/resources/faq/technical/polygonoffset.htm

LGV
LGV
Niveau 28
26 mai 2006 à 19:11:57

vi, probleme de decals assez classique.

je confirme que le z-bias existe aussi bien en DirectX qu´en OpenGL.

dans ce cas, ca correspond exactement a ce que tu veux, mais pour un truc plus complexe rien ne t´empeche d´ecrire un shader qui ecrivent des valeurs z "arbitraires"

dnob700
dnob700
Niveau 10
26 mai 2006 à 23:33:54

merci, j´ai appliqué la première méthode (modification des clipping planes), c´était précisement ce dont j´avais besoin.

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Création de sites web
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment