glReadPixels GL_DEPTH_COMPONENT und Farbe
Wie man die Tiefe und die Farbe Informationen aus jeder OpenGL? Ich möchte zum speichern einer Tiefe Bild und ein Farbbild auf der Festplatte. Was ich versucht habe ist Folgendes:
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable(GL_DEPTH_TEST);
glBegin(GL_POINTS);
glColor3f(1.0f,1.0f,1.0f);
for(int i=0; i<mesh->vertices.size();i++) {
if(! mesh->colors.empty()) {
glColor3f(mesh->colors[i][0],mesh->colors[i][1],mesh->colors[i][2]);
}
float x= mesh->vertices[i][0];
float y= mesh->vertices[i][1];
float z = mesh->vertices[i][2];
glVertex3f(x, y, z);
}
glEnd();
glFlush();
glFinish();
int width = 1280;
int height = 960;
GLfloat* depths;
depths = new GLfloat[ width * height ];
GLfloat * color;
color = new GLfloat[width * height];
glReadPixels (0, 0, width, height, GL_DEPTH_COMPONENT, GL_FLOAT, depths);
glReadPixels (0, 0, width, height, GL_BLUE, GL_FLOAT, color);
Aber wie es aussieht nur die tiefen-array gefüllt ist?
- Haben Ihre "Masche" vertex-Farben haben blau in Ihnen?
- Ja, tun Sie..! Aber immer noch das gleiche problem.. so probiert: IplImage* toSave = cvCreateImage(cvSize((int)width,(int)Höhe), IPL_DEPTH_32F, 3); glReadPixels( 0, 0, (int)Breite, (int)Höhe, GL_BGR, GL_FLOAT, toSave->imageData ); toSave->origin = 1; cvSaveImage("test.png", toSave);
- Wenn ich das gleiche innerhalb der qglviewer, seine Arbeit.. aber ich weiß nicht, warum..
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zum speichern der render-Ergebnis im Bild, die Sie speichern müssen, colorbuffer Informationen (die nicht direkt von der depth-buffer).
Können Sie separate Durchgänge für die Farbe (zum colorbuffer) und die Tiefe zu gleichen colorbuffer. Und einfachen Einsatz glReadPixels zwei Male, zuerst nach dem Rendern Farbe colorbuffer und der zweite nach dem Rendern Tiefe im colorbuffer.
Schreiben für Farbe und Tiefe gleichzeitig in zwei separate Farb-Puffer, der durch einen pass, die Sie verwenden können MRT ( Multiple Render Targets ), tutorial - http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-14-render-to-texture/ .
Ich würde wählen MRT. 🙂 Nach, dass Sie können speichern Sie Ihre Ergebnisse, indem Sie mit glReadPixels wie in zwei Durchgängen Technik.
Aber zuerst müssen Sie setup aus dem colorbuffer Sie möchten, Lesen von Pixeln, die durch die Verwendung glReadBuffer, Standard colorbuffer ist GL_BACK, was bedeutet Standard-OpenGL-Kontext backbuffer. Durch die Verwendung von MRT-müssen Sie verwenden eine der GL_COLOR_ATTACHMENTi für schreiben in colorbuffers und es kann auch eine glReadBuffer Wert.
So, nur einfaches setup glReadBuffer mit einem GL_COLOR_ATTACHMENTi und verwenden glReadPixels.
Versuchen Sie dies: