Открыть порядок GL ES - Z при рендеринге 2D-спрайтов

Мне было интересно, есть ли способ заставить OpenGL ES визуализировать набор четырехугольников (рендеринг с изменениями страницы текстуры) и визуализировать их в порядке z (или в обратном порядке).

Обратите внимание, что мне не нужен ZBuffer, я просто хочу, чтобы четырехугольники отображались в порядке zDepth.

Теперь я знаю, что люди скажут, просто визуализируйте их по порядку, ну, я визуализирую сгруппированную по странице текстуры. Однако, как вы понимаете, бывают случаи, когда спрайты с одной страницы текстуры должны появляться перед другой. Когда вы визуализируете только сортировку страницы текстуры, это вызывает проблему.

Поэтому мне было интересно, если я назначу квадроциклы в порядке z, будет ли OpenGL ES уважать это?

Любая помощь принята с благодарностью.

Ура Рич


person Rich    schedule 05.12.2009    source источник


Ответы (3)


Вы не можете достичь того, чего хотите, без Z-буфера / буфера глубины. То, что вы просите, - это работа буфера глубины без его включения !!

Когда буфер Z включен, каждый раз, когда OpenGL рисует пиксель... он проверяет существующее значение Z пикселей, а затем решает, рисовать его или нет.

Когда буфер глубины не включен, он просто перезаписывает независимо от значения z предыдущего существующего пикселя.

person Rajavanya Subramaniyan    schedule 09.12.2009

да, вы определенно можете это сделать, если вы

glEnable(GL_DEPTH_TEST);

и, конечно же, сделать кучу других вещей правильно. (убедитесь, что вы создали буфер глубины, используйте значения z, которые находятся в диапазоне вашего усеченного обзора...)

person David Maymudes    schedule 05.12.2009
comment
Он говорит о порядке отрисовки, а не о том, что они уважают Z-буфер. Обычно он просит, чтобы частицы смешивались правильно (и требует обратного Z-порядка). - person Bahbar; 05.12.2009
comment
Я думаю, что он хочет z-порядок, но он не хочет пересортировать свой код рисования в z-порядке, потому что он группирует по текстуре для производительности. - person David Maymudes; 05.12.2009

OpenGL ES не сделает этого за вас. Он будет соблюдать указанный вами порядок, то есть порядок, в котором квадроциклы находятся в вызове отрисовки. Если вы хотите, чтобы они визуализировали ваши четырехугольники, отсортированные по Z, вам придется отсортировать их самостоятельно перед отправкой в ​​OpenGL ES.

Если вы используете буфер индексов, вы, очевидно, можете сортировать только индексы. Но вам все равно придется вычислить фактический Z самостоятельно.

Редактировать: что касается вашей проблемы с текстурой, я должен добавить, что для одновременного использования разных текстур вам следует рассмотреть использование атласов текстур (то есть единую текстуру, которая содержит различные текстуры, которые вы хотите использовать в разных частях).

person Bahbar    schedule 05.12.2009