Por lo que sé, no podemos leer el valor de Z (profundidad) en OpenGL ES 2.0. Así que me pregunto cómo podemos obtener las coordenadas del mundo 3D desde un punto en la pantalla 2D?OpenGL es 2.0 Búfer de profundidad de lectura
En realidad, tengo algunos pensamientos aleatorios que podrían funcionar. Como podemos leer el valor de RGBA usando glReadPixels, ¿qué tal si duplicamos el buffer de profundidad y lo almacenamos en un buffer de color (por ejemplo, ColorforDepth). Por supuesto, debe haber alguna buena convención para que no perdamos ninguna información del buffer de profundidad. Y luego, cuando necesitamos las coordenadas mundiales de un punto, conectamos este búfer de color ColorforDepth al framebuffer y luego lo renderizamos. Entonces cuando usamos glReadPixels para leer la información de profundidad en este marco.
Sin embargo, esto dará lugar a 1 fotograma flash ya que el buffer de color es un búfer raro traducido del búfer de profundidad. Todavía me pregunto si hay alguna forma estándar de obtener la profundidad en OpenGL es 2.0.
Thx por adelantado! :)
Tommy, podría decirnos un poco más sobre la división de gl_FragCoord.z entre los componentes. No seguir. Aclamaciones. – dugla
@dugla Si la profundidad fuera un entero de 32 bits, podrías tener 8 bits en cada una de R, G, B y A. Así que, en la práctica, lo que harías es algo así como multiplicar el vector '(1, 256 , 65536, 16777216) ', luego almacene cada componente de ese vector mod 1.0 en los canales relevantes. Puede recombinarse más tarde al dividir por los componentes relevantes y sumarlos. – Tommy