Potrzebuję napisać do bufora głębi na urządzeniu z Androidem (OpenGL ES 2.0). Od gl_FragDepth
nie można zapisywać w OGL ES 2.0, muszę znaleźć obejście. Właściwie chcę renderować kule przez raycasting, podobnie do tego: http://www.sunsetlakesoftware.com/2011/05/08/enhancing-molecules-using-opengl-es-20. Jednak rozwiązanie objaśnione na tej stronie internetowej (poza renderowaniem renderowania pisanie na głębokość przy użyciu specjalnego glBlendEquation
) działa tylko na urządzeniach Apple, a nie na Androidzie, ponieważ GL_MIN_EXT
-umieszczenie nie jest obsługiwane.Obejście problemu zapisu bufora głębi/wartości głębokości w OpenGL ES 2.0
Na moim tablecie Tegra3 byłem w stanie wdrożyć tę metodę: Android GLES20.glBlendEquation not working? (btw, polecam użyciu linearyzowanych wartości głębokości, dają lepsze wyniki!) To działa całkiem dobrze, ale oczywiście to jest dostępne tylko na GPU NVIDIA.
W teorii istnieje rozszerzenie GL_EXT_frag_depth
(patrz Can an OpenGL ES fragment shader change the depth value of a fragment?), ale nie jest ono również dostępne na urządzeniach z Androidem.
Wreszcie można oczywiście zapisać bufor głębi tylko dla jednej kuli (w przejściu renderowania poza ekranem), a następnie zapisać bufor głębi dla następnej sfery w drugim przejściu renderowania i połączyć te dwa w trzecim przejściu renderowania. W ten sposób będziesz mieć 2 * n + 1 przejścia dla n-kuli - co wydaje się dość nieefektywne!
Ponieważ brakuje mi pomysłów, moje pytanie brzmi: Czy możesz wymyślić inny, ogólny sposób/obejście problemu, aby zapisać bufor głębi na urządzeniu z systemem OpenGL ES 2.0 z systemem Android?
To brzmi interesująco! Nie tak eleganckie rozwiązanie, jak bym się spodziewał, ale wydaje się, że nie ma innego ... prawdopodobnie spróbuję. Sortowanie głębokości powinno być wystarczająco szybkie dla większości białek i innych mniejszych cząsteczek. – kroneml