На этой неделе я потратил около 30 часов на написание и переписывание кода, полагая, что неправильно понял, как работает буфер глубины OpenGL. Все, что я пытался, провалилось. Теперь я решил свою проблему, обнаружив, что может быть ошибкой в реализации OpenGL для Android.
См. Эту запись API:
http://www.opengl.org/sdk/docs/man/xhtml/glClearDepth.xml
void glClearDepth (глубина GLclampd);
Указывает значение глубины, используемое при
буфер глубины очищен.
начальное значение 1.
В реализации Android есть две версии этой команды:
glClearDepthx , который принимает целое число
значение, зажатое 0-1
glClearDepthf , который принимает плавающий
значение точки, зажатое 0-1
Если вы используете glClearDepthf (1) , тогда вы получите ожидаемые результаты. Если вы используете glClearDepthx (1) , как я делал тогда, вы получите другие результаты. (Обратите внимание, что 1 является значением по умолчанию, но вызов команды с аргументом 1 приводит к результатам, отличным от того, что вообще не вызывается.) Я не знаю, что происходит, но буфер глубины очищался до значения, отличного от Я указал.