OpenGL glReadPixels mit GL_DEPTH_COMPONENT
-
Guten Abend,
ich wollte mir ("ganz schnell mal eben") eine Funktion implementieren, die mir mittels glReadPixels den Tiefenpuffer ausliest, das ganze in RGB-werte konvertiert und dadurch eine depth-map erhalten.
Dazu:void SaveZMap(const char* filename) { GLint viewport[4]; glGetIntegerv(GL_VIEWPORT, viewport); GLfloat* zbuffer_float = new GLfloat[viewport[2] * viewport[3]]; glPixelStorei(GL_PACK_ALIGNMENT, 1); glReadPixels(0, 0, viewport[2], viewport[3], GL_DEPTH_COMPONENT, GL_FLOAT, zbuffer_float); GLbyte* zbuffer_rgb = new GLbyte[viewport[2] * viewport[3] * 3]; for (int i = 0; i < viewport[2] * viewport[3]; i++) { GLbyte pixel_val = static_cast<GLbyte> (zbuffer_float[i] * 255.0f); zbuffer_rgb[3 * i] = pixel_val; zbuffer_rgb[3 * i + 1] = pixel_val; zbuffer_rgb[3 * i + 2] = pixel_val; } SaveTGA(filename, viewport[2], viewport[3], zbuffer_rgb); delete[] zbuffer_float; delete[] zbuffer_rgb; }
Das ganze haut super hin, wenn ich eine orthogonale Projektionsmatrix habe. Sobald ich allerdings gluPerspective bemühe um mir eine perspektivische Matrix aufzusetzen und dann den obigen Code ausführe, erhalte ich lediglich ein gleichmäßig hellgraues Bild in Fenstergröße.
Offensichtlich versteh ich irgendwas falsch oder bau diversen Mist. Nur was oder welchen?
mfg,
reactor
-
Vergesst es einfach. Kein Problem.
-
Nur Interessehalber:
Woran lag es? Abstand von zNear und zFar zu gross bzw. z_werte der Objekte zu nah beieinander?
-
Ich glaub nicht mehr daran, dass manche Leute nicht wirklich ne kristallkugel zu Hause stehen haben.
Du lagst goldrichtigzNear + zFar waren die Schuldigen, bzw. die Missbrauchten.
Ist mir quasi in dem Moment gekommen, in dem ich den Beitrag abgesendet hatte, dass das ein Problem sein könnte...