Отображение изображений без черной части
Я пытаюсь отобразить растровое изображение с помощью opengl, но не хочу, чтобы отображалась черная часть изображения. Я могу сделать это в DirectX, но не в OpenGL. Другими словами - у меня есть изображения растений с черным фоном, и я хочу, чтобы растения были нарисованы так, чтобы они выглядели реалистично (без черной рамки).
2 ответа
Вы можете сделать это с помощью альфа-тестирования:
- Добавьте альфа-канал к вашему изображению, прежде чем загружать его в текстуру,
0.0
на черных пикселях и1.0
где-либо еще. - Включить альфа-тестирование с
glEnable( GL_ALPHA_TEST )
glAlphaFunc( GL_LESS, 0.1f )
- Визуализируйте текстурированный квадрат как обычно. OpenGL пропустит ноль-альфа-тексель благодаря альфа-тесту.
Есть несколько способов сделать это.
Одним из них является использование программы редактирования изображений, такой как Photoshop или GIMP, чтобы добавить альфа-канал к изображению, а затем установить для черных частей изображения максимальное альфа-значение. Плюс в том, что он позволяет вам решить, какие части изображения вы хотите сделать прозрачными, поскольку полностью программный подход может иногда скрывать то, что вы хотите видеть.
Другой метод состоит в том, чтобы проходить через каждый пиксель в вашем растровом изображении и устанавливать альфа-канал на основе определенного порогового значения (т. Е. Если вы хотите получить истинный черный цвет, проверьте, имеет ли каждый цветовой канал значение 255). Недостатком этого является то, что он иногда может привести к исчезновению некоторых из ваших строк.
Кроме того, вам необходимо убедиться, что вы действительно включили альфа-канал и тестирование, как указано в ответе выше. Убедитесь, что дважды проверьте порядок ваших звонков, так как это может вызвать много проблем, когда вы пытаетесь использовать прозрачность.
Это примерно то, что я могу предложить, поскольку вы не опубликовали сам код, но, надеюсь, этого должно быть достаточно, чтобы хотя бы вы могли найти решение.