Question

Je suis rendu dans un OpenGL offscreen objet framebuffer et comme l'enregistrer comme une image. Notez que le OIR est plus grande que la taille d'affichage. Je peux rendre dans le tampon hors-champ et l'utiliser comme texture, qui fonctionne. Je peux « faire défiler » cette texture plus grande grâce à l'affichage en utilisant un décalage, ce qui me rend confiant, que je rends dans un contexte plus large que la fenêtre.

Si je sauve le tampon offscreen à un fichier image, il obtient toujours recadrée. Le fragment de code pour l'économie est:

void ofFBOTexture::saveImage(string fileName) { 
    glReadBuffer(GL_COLOR_ATTACHMENT0_EXT); 
    // get the raw buffer from ofImage
    unsigned char* pixels = imageSaver.getPixels();
    glReadPixels(0, 0, 1024, 1024, GL_RGB, GL_UNSIGNED_BYTE, pixels); 

    imageSaver.saveImage(fileName); 
} 

S'il vous plaît noter que le contenu de l'image est recadrée, la partie visible est enregistrée correctement (ce qui signifie pas d'erreur dans des formats de pixels, les questions GL_RGB etc.), mais l'espace restant est rempli d'une couleur.

Alors, ma question est - ce que je fais mal

?
Était-ce utile?

La solution

Enfin, je résolu la question.

Je dois activer le fbo pour enregistrer son contenu:

glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo);
// save code
...
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);

alors que la sélection de la fbo pour glReadPixels via

glReadBuffer(GL_COLOR_ATTACHMENT0_EXT);

ne suffit pas.

(toutes choses où correctes et testées, par exemple. Tailles de fenêtres, la largeur et la hauteur de tampon, texture d'image, etc.)

Autres conseils

Deux questions pour commencer: (par exemple essayez-vous d'enregistrer une image 1024 x 1024 Quelle est la taille que vous obtenez)? Comment allez-vous créer ImageSaver et êtes-vous que votre largeur et la hauteur sont correctes

Tu ne fais rien de mal, cela a été un comportement assez fréquent avec les pilotes graphiques OpenGL depuis longtemps - Je me souviens en cours d'exécution contre exactement la même question sur nVidia Geforce 3 cartes il y a au moins une dizaine d'années, et j'adopté une solution similaire -. rendu à une texture offscreen

Cela sonne comme vous avez la mauvaise taille de la fenêtre ou quelque chose de similaire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top