2010-10-21 5 views
1

Я новичок в 3D-графике в целом, и я пытаюсь сделать 3D-игру для iPhone, а точнее, использовать текстуры, которые содержат прозрачность. Я могу загрузить текстуру (8-разрядный PNG-файл) в OpenGL и сопоставить ее с квадратом (сделанным из полосы треугольника), но прозрачные части изображения не прозрачны при запуске приложения в симуляторе - они возьмите цвет фона, независимо от того, на что он установлен, но неясные изображения, которые находятся дальше. Я не могу опубликовать скриншот, так как я новый пользователь, поэтому извиняюсь за это. Я попытаюсь загрузить и связать его по-другому.OpenGL ES для смешивания iPhone не работает

Еще более раздражает то, что при загрузке изображения в код примера GLSprite Apple он работает точно так, как я хочу. Я скопировал код из setupView GLSprite в свой проект, и он все еще не работает должным образом.

Я использую функцию смешивания:

glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); 

Я был под впечатлением, что это правильно для того, что я хочу сделать.

Есть ли что-то очень основное, что мне не хватает здесь? Любая помощь будет высоко оценена, поскольку я представляю это как проект курсовой работы через несколько недель и очень хотел бы, чтобы он работал.

ответ

0

Позвольте мне разорвать этот вниз:

Прежде всего, ваш прозрачный объект рисуется.

В этот момент две вещи:

  • Пиксели правильно обращается к заднему буфера
  • буфер глубины пикселя установлены в буфере глубины. Обратите внимание, что буфер глубины будет записывать значения по всему объекту, а прозрачность не влияет на него.

Затем вы рисуете другие объекты за прозрачным объектом. Но любой из этих объектов пиксели не будут рисоваться, потому что их буфер глубины меньше, чем те, которые уже нарисованы.

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

Надеюсь, что это поможет.

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

+0

Спасибо, это работает! Просто погрузившись в глубокий конец с 3D-графикой, я думаю, что пропустил некоторые из простых вещей, подобных этому. – Jay

+0

Рад, что я мог помочь. Я думаю, что дайвинг часто - лучший способ узнать :) – CiscoIPPhone

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