Todavía estoy tratando de leer píxeles del sombreador de fragmentos y tengo algunas preguntas. Sé que gl_FragColor regresa con vec4 que significa RGBA, 4 canales. Después de eso, estoy usando glReadPixels para leer y escribir OBF en los datosgl_FragColor y glReadPixels
GLubyte *pixels = new GLubyte[640*480*4];
glReadPixels(0, 0, 640,480, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
Esto funciona bien pero realmente tiene tema de la velocidad. En lugar de esto, solo quiero leer RGB, así que ignore los canales alfa. Intenté:
GLubyte *pixels = new GLubyte[640*480*3];
glReadPixels(0, 0, 640,480, GL_RGB, GL_UNSIGNED_BYTE, pixels);
y esto no funcionó. Supongo que es porque gl_FragColor devuelve 4 canales y tal vez debería hacer algo antes de esto? En realidad, ya que mi imagen devuelta (gl_FragColor) es en escala de grises, hice algo así como
float gray = 0.5 //or some other values
gl_FragColor = vec4(gray,gray,gray,1.0);
Entonces, ¿hay alguna forma eficiente de utilizar glReadPixels en lugar de utilizar el primer método de 4 canales? ¿Cualquier sugerencia? Por cierto, esto es en código opengl es 2.0.
Gracias por la respuesta! ¡Definitivamente lo intentaré pronto! ¿Pero puede darme más idea o descripción sobre el framebuffer fuera de pantalla? Soy un poco nuevo en gráficos, así que no estoy familiarizado con los términos. Tal vez un enlace para tutorial? ¡Gracias de nuevo! – user2168
Un objeto de búfer de marco (FBO) es básicamente un objetivo de renderizado secundario que usted mismo crea. Puede contener un buffer de color, buffer de profundidad, buffer alfa o cualquier cosa. Luego puede dibujar (en lugar de a la "pantalla", es decir, el búfer de fotograma principal) y usar los resultados de alguna manera, por ejemplo, como una textura para los efectos, o para volver a leer los píxeles (en su caso). – Kos
http://www.songho.ca/opengl/gl_fbo.html parece un buen tutorial práctico con código de ejemplo (para OpenGL, sin embargo, debe ser + - lo mismo en ES 2). También lea las especificaciones (vinculadas anteriormente, capítulo 4.4.3). – Kos