2014-02-17 2 views
1

Я пытаюсь отобразить растровое изображение с использованием opengl, но я не хочу, чтобы отображалась черная часть изображения. Я могу сделать это в DirectX, но не в opengl. Другими словами - у меня есть изображения растений с черным фоном, и я хочу, чтобы растения были нарисованы, чтобы они выглядели реалистично (без черной границы).Отображение изображений без черной части

ответ

2

Вы можете сделать это с помощью альфа-тестирования:

  1. Добавить альфа-канал для вашего изображения, прежде чем загружать его в текстуру, 0.0 на черных пикселей и 1.0 и везде.
  2. Включить альфа-тестирование с glEnable(GL_ALPHA_TEST)
  3. glAlphaFunc(GL_LESS, 0.1f)
  4. Рендер текстурированных четверной как обычно. OpenGL будет пропускать нулевые альфа-тексели благодаря альфа-тесту.
+0

'glAlphaFunc' - это устаревшая функция. (см. http://stackoverflow.com/a/16077657/1418097) –

+0

Спасибо за ответ. Opengl кажется так трудно подать в суд, по сравнению с directX! Я вернусь и отправлю сообщение, когда еще немного поработаю. – carpman

+0

@ user3265957: Я не знаю, я считаю, что Хронос будет меньше/проще, чем Microsoft. – genpfault

1

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

Одним из них является использование программы редактирования изображений, такой как Photoshop или GIMP, для добавления альфа-канала к вашему изображению, а затем установите черные части изображения на максимальное значение альфа. Поверхность этого заключается в том, что вы можете решить, какие части изображения вы хотите быть прозрачными, поскольку полностью программный подход может иногда скрывать то, что вы хотите видеть.

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

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

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

+0

Большое спасибо за помощь - я попробую оба метода. Я нахожу opengl намного сложнее в использовании, чем directx. В directX это можно сделать легко, не делая ничего для изображения. Спасибо что нашли время ответить. – carpman

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