2012-07-05 13 views
7

Necesito escribir en el búfer de profundidad en un dispositivo Android (OpenGL ES 2.0). Dado que gl_FragDepth no se puede escribir en OGL ES 2.0, tengo que encontrar una solución alternativa. De hecho, quiero renderizar esferas mediante el raycasting, similar a esto: http://www.sunsetlakesoftware.com/2011/05/08/enhancing-molecules-using-opengl-es-20. Sin embargo, la solución explicada en este sitio web (paso de render fuera de pantalla escribiendo la profundidad usando un glBlendEquation especial) solo funciona en dispositivos Apple, no en Android, porque no es compatible con GL_MIN_EXT-blending.Solución para escribir el valor del búfer de profundidad/profundidad en OpenGL ES 2.0

En mi tableta Tegra3 que fue capaz de poner en práctica este método: Android GLES20.glBlendEquation not working? (por cierto, recomiendo el uso de valores de profundidad linealizadas, dan mejores resultados!) que funciona bastante bien, pero por supuesto esto sólo está disponible en GPUs de Nvidia.

En teoría, existe la extensión GL_EXT_frag_depth (ver Can an OpenGL ES fragment shader change the depth value of a fragment?), pero no está disponible en dispositivos Android también.

Finalmente, podría escribir el búfer de profundidad para una sola esfera (en un pase de renderizado fuera de pantalla), luego escribir el búfer de profundidad para la siguiente esfera en un segundo pase de renderización y combinar los dos en un tercer pase de renderización. Al hacerlo, tendrías 2 * n + 1 pases de renderizado para n esferas, lo que parece ser bastante ineficiente.

Así que como me estoy quedando sin ideas, mi pregunta es: ¿Puedes pensar en otra forma/solución genérica para escribir el búfer de profundidad en un dispositivo Android OpenGL ES 2.0?

Respuesta

2

Bueno, está seguro de que se está quedando sin opciones aquí. No sé de ninguna solución alternativa porque no sé Opengl ES tan bien.

La única cosa que viene a la mente sería la combinación del enfoque multi-pass de fuerza bruta con un poco de pre-procesamiento:

Ordene los ámbitos en grupos donde los átomos no se superponen entre sí. Debería ser posible ordenar todas sus esferas de proteínas en menos de diez grupos. Luego renderice todas las esferas de cada grupo en una sola pasada. La profundidad del vértice es suficiente aquí, porque las esferas no se superponen. Entonces puedes "mezclar a profundidad" los resultados.

Esto requiere un preprocesamiento que podría ser un problema.

+0

¡Esto suena como una opción interesante! No es una solución tan elegante como esperaba, pero parece que no hay otra ... Probablemente la probaré. La clasificación en profundidad debe ser lo suficientemente rápida para la mayoría de las proteínas y otras moléculas más pequeñas. – kroneml

Cuestiones relacionadas