Загрузите и используйте растровое изображение альфа-канала - PullRequest
1 голос
/ 05 июня 2019

Учитывая следующее растровое изображение альфа-канала:

const int width = 4, height = 4;
var alpha = new byte[width * height] {
    255, 255, 255, 255,
      0, 127, 127,   0,
      0, 127, 127,   0,
    255, 255, 255, 255
};

Я хотел бы загрузить его в OpenGl и использовать его во фрагментном шейдере как:

out vec4 color;
void main() {
    float alpha = // Get pixel alpha like texture()
    color = vec4(1, 0, 0, alpha);
}

Я знаю, что возможно использовать растровую текстуру RGBA, но возможно ли использовать только растровую текстуру альфа-канала? (от самого простого byte[] типа)

1 Ответ

3 голосов
/ 05 июня 2019

Вам не нужно использовать растровое изображение альфа-канала, вы можете использовать растровое изображение с 1 каналом, как в:

glTexImage2D(GL_TEXTURE_2D, 0, GL_RED, width, height, 0, GL_RED, GL_UNSIGNED_BYTE, byteBuffer);

Здесь с GL_RED мы говорим, что мы хотим, чтобы текстура была только с одним каналом (красный) Так что во фрагментном шейдере вы можете сделать float alpha = texture(...).r;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...