Формат пикселей для текстуры с одним цветовым каналом OpenGL

Имею текстуру отражения (Specular Map), использую её в шейдере подобным образом:

vec3 specular = texture(specularMap, fs_in.TexCoords).rgb * spec;

Всё работает нормально, блик там, где нужно, но красного цвета. Почему красного - понимаю, из-за определения такого формата пикселей для текстуры, когда всего 1 байт на пиксель:

SDL_Surface* data = IMG_Load(path.c_str());
...
auto nrComponents = static_cast<uint16_t>(data->format->BytesPerPixel);
        GLenum format;
        if (nrComponents == 1)
            format = GL_RED;
        else if (nrComponents == 3)
            format = GL_RGB;
        else if (nrComponents == 4)
            format = GL_RGBA;
...
glTexImage2D(GL_TEXTURE_2D, 0, format, data->w, data->h, 0, format, GL_UNSIGNED_BYTE, data->pixels);

Я не понимаю, какой формат нужно установить...Что только не пробовал, блика либо нет вообще, либо он есть и красный, если GL_RED. введите сюда описание изображения


Ответы (1 шт):

Автор решения: Kromster

Вот так в шейдере напишите, чтобы красный канал одинаково шёл все три RGB компоненты вашего белого блика:

vec3 specular = texture(specularMap, fs_in.TexCoords).rrr * spec;
→ Ссылка