2013-07-10 5 views
1

Я рисую довольно простую 2D-сцену, содержащую только прямоугольники. У меня есть один FloatBuffer, в который я помещал X, Y, Z, R, G, B, A, U и V данные для каждой вершины. Я рисую с использованием glDrawArrays и GL_TRIANGLE_STRIP, сохраняя отдельные прямоугольники с вырожденными вершинами.OpenGL, альфа-смешивание с упакованным буфером и несколькими текстурами

Чтобы облегчить использование нескольких текстур, я сохраняю отдельные массивы поплавков для вызовов рисования каждой текстуры. Текстура привязана, массив float помещается в FloatBuffer, и я рисую. Затем следующая текстура затем привязывается, и это продолжается до тех пор, пока я не нарисую все мои текстуры для этого рендеринга.

Я использую ортографическую проекцию, поэтому я могу использовать координаты Z и GL_DEPTH_TEST для настройки глубины независимо от порядка ничьи.

Чтобы использовать альфа-смешивание, каждый кусок советов в Интернете, кажется, говорит:

GLES20.glEnable(GLES20.GL_BLEND); 
GLES20.glBlendFunc(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA); 

Это прекрасно работает на каждую текстуру в «рисовать», потому что у меня есть отрисовки вызовов, отсортированные в буфере задом перед рисунком. У меня нет возможности правильно рисовать текстуру2 под частично прозрачной текстурой1 из-за теста глубины и текстуры 1, нарисованного перед текстурой2. texture1 отбивает перекрывающуюся часть текстуры2, потому что тест глубины говорит, что текстура1 находится перед текстурой2.

Единственные способы, которые я вижу по этому поводу, - 1) использовать только 1 текстуру во всей программе и 2) не использовать прозрачные текстуры. Ни один из них не является приемлемым вариантом.

В принципе, мне нужен способ для альфа-смешивания без необходимости сортировки вперед-назад. Это возможно?

ответ

Смежные вопросы