OpenGL ES для iPhone не работает - PullRequest
       48

OpenGL ES для iPhone не работает

1 голос
/ 21 октября 2010

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

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

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

glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);

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

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

1 Ответ

0 голосов
/ 21 октября 2010

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

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

В этот момент происходят две вещи:

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

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

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

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

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

...