Проблема с буфером глубины Android: Совет для тех, кто испытывает проблемы - PullRequest
3 голосов
/ 16 января 2011

На этой неделе я потратил около 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 приводит к результатам, отличным от того, что вообще не вызывается.) Я не знаю, что происходит, но буфер глубины очищался до значения, отличного от Я указал.

1 Ответ

3 голосов
/ 16 января 2011

Попробуйте передать 65536 в glClearDepthx().

GLfixed - это фиксированная точка S15.16, поэтому 1.0 представлен 2^16 или 65536.

Кроме того, вы ссылаетесь на обычную документацию OpenGL, а не на OpenGL ES 1.1 документы.

...