Open GL ES - Z порядок при рендеринге 2D спрайтов - PullRequest
0 голосов
/ 05 декабря 2009

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

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

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

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

Любая помощь получена.

Приветствие Рич

Ответы [ 3 ]

0 голосов
/ 05 декабря 2009

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

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

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

0 голосов
/ 09 декабря 2009

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

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

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

0 голосов
/ 05 декабря 2009

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

glEnable(GL_DEPTH_TEST);

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

...