Формат пикселей для текстуры с одним цветовым каналом 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;