Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

OpenGL, Z-Buffer et cartes ATI

3 réponses
Avatar
pdorange
Bonjour,

Je m'amuse depuis quelques temps avec OpenGL en Carbon sur mon viel iMac
et ça se passe plutot bien.
Mais je rencontre un soucis de précision avec le Z-Buffer. Comme
j'essaye de représenter une simulation du système solaire j'ai affaire
de de grandes echelles, d'autant plus que j'ai ajouté un fond étoilé
très éloigné et qu'en même temps je désire afficher les objets très
proche.
Ce genre de situation abouti est des abbérations pour les objets
éloignés.
J'ai beau essayé différentes combinaison de zNear et zFar je m'en sort
que moyennement.
J'ai bien étudié la question de bien compris le fonctionnement
logarithmique du Z-Buffer.
J'ai aussi regardé de plus près et je me suis aperçut que le Z-Buffer
utilisé par défaut est de 16 bits. Alors que ma carte (pourtant vieille)
supporte le 24 ou 32 bits : mais je ne trouve aucune informations sur
les moyens d'accéder a des Z-Buffer 24 ou 32 bits.

Des pistes ?

--
Pierre-Alain Dorange

Vidéo, DV et QuickTime <http://alcazar.xbecom.com/videogarage/>
Clarus, the DogCow <http://clarus.chez.tiscali.fr/>

3 réponses

Avatar
lucsky
Pierre-Alain Dorange wrote:

J'ai aussi regardé de plus près et je me suis aperçut que le Z-Buffer
utilisé par défaut est de 16 bits. Alors que ma carte (pourtant vieille)
supporte le 24 ou 32 bits : mais je ne trouve aucune informations sur
les moyens d'accéder a des Z-Buffer 24 ou 32 bits.

Des pistes ?


La précision du Depth Buffer peut être choisie à la creation du contexte
OpenGL, qui varient selon l'API utilisée.

Il suffit en général de spécifier l'attribut kivabien dans les
spécifications du pixel format:
- NSOpenGLPFADepthSize pour le NSOpenGLPixelFormat de Cocoa.
- kCGLPFADepthSize pour le CGLChoosePixelFormat de CoreGraphics.
- AGL_DEPTH_SIZE pour le aglChoosePixelFormat d'AGL.
- etc...

Et si 32 bits ne suffisent toujours pas, la FAQ OpenGL indique qu'un
rendu multipass est une solution "courante":

"There is no way that a standard-sized depth buffer will have enough
precision for my astronomically large scene. What are my options?

The typical approach is to use a multipass technique. The application
might divide the geometry database into regions that don't interfere
with each other in Z. The geometry in each region is then rendered,
starting at the furthest region, with a clear of the depth buffer before
each region is rendered. This way the precision of the entire depth
buffer is made available to each region."

<http://www.opengl.org/resources/faq/technical/depthbuffer.htm>

--
Luc Heinrich -

Avatar
pdorange
Luc Heinrich wrote:

J'ai aussi regardé de plus près et je me suis aperçut que le Z-Buffer
utilisé par défaut est de 16 bits. Alors que ma carte (pourtant vieille)
supporte le 24 ou 32 bits : mais je ne trouve aucune informations sur
les moyens d'accéder a des Z-Buffer 24 ou 32 bits.

Des pistes ?


La précision du Depth Buffer peut être choisie à la creation du contexte
OpenGL, qui varient selon l'API utilisée.

Il suffit en général de spécifier l'attribut kivabien dans les
spécifications du pixel format:
- NSOpenGLPFADepthSize pour le NSOpenGLPixelFormat de Cocoa.
- kCGLPFADepthSize pour le CGLChoosePixelFormat de CoreGraphics.
- AGL_DEPTH_SIZE pour le aglChoosePixelFormat d'AGL.
- etc...


OK, pour le moment je me sers juste de base d'un exemple GLU basique
fournit avec XCode, je vais étudier ça car va falloir de toute façon que
j'intégre tout ça proprement dans une interface.

[...]
Et si 32 bits ne suffisent toujours pas, la FAQ OpenGL indique qu'un
rendu multipass est une solution "courante":

"There is no way that a standard-sized depth buffer will have enough
precision for my astronomically large scene. What are my options?


Voilà qui m'intéresses fortement. J'ai fait quelques essais moi même ce
week end dans ce sens mais ça mettais simplement la panique dans mes
matrices caméras sans résultats probants.
Je vais étudier ça avec grande attention, merci beaucoup.

Marrant que j'ai pas trouvé ça, j'ai pourtant pas mal cherché un peu
partout y compris sur ce site.

--
Pierre-Alain Dorange

Vidéo, DV et QuickTime <http://alcazar.xbecom.com/videogarage/>
Clarus, the DogCow <http://clarus.chez.tiscali.fr/>


Avatar
pdorange
Pierre-Alain Dorange wrote:

Je vais étudier ça avec grande attention, merci beaucoup.


OK j'ai consulté la FAQ et particulièrement cet article; mais il me
reste une interrogation.

Pour régler le problème de valeur très différente en Z, il conseill e de
travailler par région, ce qui dans mon cas ne posera pas de problème
puisque j'ai 3 régions distinctes : le fond étoilé à "l'infini", le
système solaire (planête, satellites, soleil...) et éventuellement des
objets volants très proche.
Pour cela la FAQ précise qu'il faut dessiner région par région en
commençant par le plus éloigné et en faisant un Clear Depth Buffer entre
chacune d'elle. OK mais je vois pas bien en quoi cela va suffir pour
améliorer la précision si zNear et zFar en change pas.
Or d'après mes essais on ne peut pas les changer.

Bon plus d'infos quand j'aurai fait des essais.

--
Pierre-Alain Dorange

Vidéo, DV et QuickTime <http://alcazar.xbecom.com/videogarage/>
Clarus, the DogCow <http://clarus.chez.tiscali.fr/>