2 votes

restituer le FBO dans un fichier image externe

Je suis novice en matière d'OpenGL et j'utilise les objets Frame Buffer (FBO) pour le rendu hors écran, comme le suggèrent la plupart des réponses aux autres questions.

     GLuint fb[1],color_rb[1];
   glGenFramebuffersEXT(1, fb);
   glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fb[0]);

   glGenRenderbuffersEXT(1, color_rb);
   glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, color_rb[0]);
   glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_RGB, 256, 256);
   glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_RENDERBUFFER_EXT, color_rb[0]);

   // rendering to the FBO 
   glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fb[0]);
   glClearColor(0.0, 0.0, 0.0, 0.0);
   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

   glViewport(0, 0, 256, 256);
   glMatrixMode(GL_PROJECTION);
   glLoadIdentity();
   glOrtho(0.0, 256.0, 0.0, 256.0, -1.0, 1.0); 
   glMatrixMode(GL_MODELVIEW);
   glLoadIdentity();

   glDisable(GL_TEXTURE_2D);
   glDisable(GL_BLEND);
   glEnable(GL_DEPTH_TEST);

   RenderATriangle();     // i have defined this function to render a texture in a triangular geometry

   GLubyte pixels[4*4*4];
   glReadPixels(0, 0, 4, 4, GL_BGRA, GL_UNSIGNED_BYTE, pixels);

   glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);

Lorsque j'utilise ce code, je n'obtiens aucune erreur de compilation. J'ai également installé glew dans mon système ubuntu 12.10. Lorsque j'exécute ce code, une erreur de segmentation apparaît. J'ai essayé de vérifier où se trouve l'erreur en utilisant les instructions cout et j'ai trouvé que l'erreur vient de la génération du frame buffer en utilisant glGenFramebuffersEXT(1, GLuint* array). Donc quelqu'un peut-il me dire ce qui ne va pas avec la génération du FBO dans mon code. Et une dernière chose, si quelqu'un peut me dire comment faire un rendu vers un fichier image externe sur le disque.

Mes importations sont :

#include <iostream>
#include <GL/glew.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>

4voto

datenwolf Points 85093

Lorsque j'exécute ce code, un défaut de segmentation apparaît.

Sous Linux, tout ce qui est postérieur à OpenGL-1.2 doit être initialisé au moment de l'exécution. Ceci est appelé chargement d'extension . Comme cette tâche est un peu ardue si elle est effectuée "manuellement", un certain nombre de bibliothèques de chargeurs d'extensions ont été développées. Un choix populaire est GLEW .

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