2009-02-05 8 views
0

J'utilise OpenGL dans une application QT. À un certain moment je rends à un QGLPixelBuffer. J'ai besoin d'obtenir le tampon de profondeur de l'image, ce que j'accomplirais normalement avec glReadPixels (..., GL_DEPTH_COMPONENT, ...); J'ai essayé de faire le QGLPixelBuffer courant et en utilisant ensuite glReadPixels() mais tout ce que je reçois est une image blanche.Obtenir le tampon de profondeur de QGLPixelBuffer

Voici mon code

bufferCanvas->makeCurrent(); 
[ ...render... ] 
QImage snapshot(QSize(_lastWidth, _lastHeight), QImage::Format_Indexed8); 
glReadPixels(0, 0, _lastWidth, _lastHeight, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, snapshot.bits()); 
snapshot.save("depth.bmp"); 

Tout évidemment mal avec elle?

Répondre

0

Je ne l'ai jamais utilisé QImage directement, mais je voudrais essayer de répondre ou se pencher sur les domaines suivants:

  1. appelez-vous glClear() avec le bit de profondeur avant de lire l'image?
  2. Votre tampon QGLFormat est-il activé?
  3. Pouvez-vous directement lire readPixel et vérifier si les données sont correctes?
  4. Est-ce que QImage :: bits() assure le stockage séquentiel de la mémoire avec l'alignement requis?

Hope this helps

0

conjecture sauvage suit.

Vous créez une image bitmap indexée à l'aide de QImage, mais vous n'assimilez pas de table de couleurs. Je suppose que la table de couleurs par défaut rend votre image blanche. Essayez ceci avant d'enregistrer votre image:

for (int i = 0 ; i <= 255 ; i++) { 
    snapshot.setColor(i, qRGB(i, i, i)); 
} 
1

Eh bien, il n'y a aucune garantie que les données de pixels sous-jacentes stockées dans QImage (et obtenu via sa fonction QImage :: Bits()) est compatible avec ce que glReadPixels de OpenGL() fonction écrit.

Puisque vous utilisez QGLPixelBuffer, quel est le problème avec QGLPixelBuffer::toImage()?

Questions connexes