2013-08-19 1 views
0

Я разрабатываю 3D-игру для iOS с openGL ES2. 3D-спрайты должны быть полупрозрачными с альфа-каналом около 0,5 для отображения фона. Проблема в том, что я хочу, чтобы задняя сторона 3D-спрайтов полностью не видна. Другими словами, я хочу видеть только переднюю часть спрайта (точно так же, как это было бы с альфа-каналом = 1), но с фоном, видимым через него. Есть ли какая-либо функция blend или некоторые настройки шейдера для получения этого эффекта?Функция смешивания для 3D спрайтов в openGL ES 2.0

ответ

1

Предположительно, ваши спрайты текстурированы на геометрию (квадратики, нарисованные треугольниками или треугольными полосками)? Все, что вам нужно сделать, это включить лицо забой:

glEnable(GL_CULL_FACE); 

Это предотвратит рисунок «обратную» сторону любого полигона задолго до того, он попадает в смесительную стадии графического конвейера - так что вы получите выигрыш в производительности дополнение к визуальному эффекту вашего после.

Вы должны убедиться, что ваши «передние» и «задние» стороны определены последовательно. По умолчанию OpenGL рассматривает любой многоугольник, вершины которого обращены против часовой стрелки (и наоборот). Если включение выделения лица приводит к исчезновению всех ваших спрайтов, это связано с тем, что их вершины находятся в порядке по часовой стрелке. Либо измените порядок своих вершин, либо скажите OpenGL, что все они обратные с glFrontFace(GL_CW).

+0

Спасибо, Рикстер, я полностью забыл GL_CULL_FACE! Ваше предложение делает трюк. – Alex79