Как установить прозрачные определенные цвета в текстуре Opengl? - PullRequest
2 голосов
/ 12 февраля 2012

Я пытаюсь создать библиотеку, которую я могу использовать для обработки 2-мерного рендеринга в Opengl (c ++). У меня есть все, но я не могу понять, как сделать текущие цвета прозрачными (например, возможность установить 255, 0, 255 до прозрачного) Из чтения по теме я понимаю, что мне нужно предварительно обработать текстуру и установить альфа-значение этого цвета равным 0, но я понятия не имею, как это сделать.

PS: я использую SOIL для загрузки текстур, если это помогает.

Ответы [ 2 ]

4 голосов
/ 12 февраля 2012

Я понял, прочитав тему, что мне нужно предварительно обработать текстуру и установить альфа-значение этого цвета на 0, но я понятия не имею, как это сделать.

for(y = 0; y < image.height; y++) for(x = 0; x < image.width; x++) {
    if( image.data[x, y].rgb == colorkey ) {
        image.data[x, y].alpha = 0.0;
    } else {
        image.data[x, y].alpha = 1.0;
    }
}

/* ... */

upload_image_to_texture(image);
2 голосов
/ 12 февраля 2012

Во-первых, я бы порекомендовал вам использовать альфа-прозрачные текстуры, а не цветовые или хроматические ключи, если только у них нет какой-то особой причины (т.е. очень мало памяти или ваши попытки использовать Minecraft).С учетом сказанного используйте шейдеры.В вашем фрагментном шейдере используйте ключевое слово discard, когда цвет фрагмента соответствует вашему цветовому ключу.Есть официальный учебник .

...