12 votes

Visualiser le tampon de profondeur

J'essaie de visualiser le tampon de profondeur à des fins de débogage, en le dessinant par-dessus le rendu réel lorsqu'une touche est enfoncée. Cela fonctionne en grande partie, mais l'image résultante semble être agrandie. (Ce n'est pas seulement l'image originale, dans une échelle de gris étrange) Pourquoi n'a-t-elle pas la même taille que le tampon de couleur ?

C'est ce que j'utilise pour visualiser le tampon de profondeur :

void get_gl_size(int &width, int &height)
{
    int iv[4];
    glGetIntegerv(GL_VIEWPORT, iv);
    width = iv[2];
    height = iv[3];
}

void visualize_depth_buffer()
{
    int width, height;

    get_gl_size(width, height);

    float *data = new float[width * height];

    glReadPixels(0, 0, width, height, GL_DEPTH_COMPONENT, GL_FLOAT, data);
    glDrawPixels(width, height, GL_LUMINANCE, GL_FLOAT, data);

    delete [] data;
}

1voto

Andrei Krotkov Points 2204

Je ne suis pas sûr que ce soit votre erreur réelle, mais je peux vous recommander de vérifier certaines choses. Ce serait bien si vous fournissiez une capture d'écran de la façon dont le zoom est effectué.

Tout d'abord, assurez-vous que les matrices de projection/modelview sont exactement les mêmes que celles de votre rendu. Je ne vois pas comment cela pourrait affecter le résultat, mais c'est une piste à explorer.

Deuxièmement, le spec précise que glPixelStore, glPixelTransfer, et glPixelMap peuvent affecter les résultats, vous voudrez vous assurer que ceux-ci sont correctement définis.

Si vous parvenez à le faire fonctionner, veuillez nous dire ce qui n'a pas fonctionné - la question semble intéressante :)

0voto

Bahbar Points 12482

Ce code devrait fonctionner. Auriez-vous par hasard quelque chose d'autre à appeler glPixelZoom ? Cela vaut la peine de le réinitialiser pour vérifier que vous ne demandez pas réellement un zoom.

0voto

starmole Points 2160

Une autre chose à vérifier est que votre position raster est correcte. voir glRasterPos. le code tel que posté devrait fonctionner, mais je peux voir comment l'état est foiré ailleurs (vous dessinez quelque chose avant de visualiser la profondeur...). ceci dit, vous êtes probablement dans une zone des pilotes gl qui n'est pas bien testée parce qu'elle est inhabituelle. ce que vous devriez faire ensuite : - tester avec un autre fournisseur (ati/nv..) - écrivez les données lues dans un fichier pour voir si le dessin ou la lecture ne fonctionne pas comme prévu.

0voto

orion elenzil Points 667

Le modèle et les matrices de projection n'auront aucun effet sur ce point.

Essayez peut-être de définir la position de dessin à 0,0 avec glRasterPos ou glWindowPos. apparemment il y a aussi glPixelZoom.

-4voto

OrB Points 47

1) Déchargez les données brutes du tampon de profondeur dans un fichier.

2) Ouvrez-le en utilisant IrfanView (Ouvrir en tant que -> fichier RAW)

3) Ajustez les paramètres (largeur, hauteur) et le format des pixels en fonction de votre tampon de profondeur BPP (8bits, 16bits, ...). Assurez-vous que l'échelle de gris est cochée.

4) Prenez une bière.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X