Я пытаюсь использовать RGBA-каналы текстуры PNG независимо друг от друга в фрагментном шейдере. Но когда я использую texture2D(map, uv).g
, на выходе появляются данные из зеленого канала и красного канала.
Установка:
Я использую эту текстуру.
three.js 0.104.0
Текстура в GIMP 2.10.10:
Закройте с отключенным красным каналом, просто чтобы показать, что показанные ниже данные не находятся в зеленом канале:
Вершинный шейдер:
varying vec2 vUV;
void main(void) {
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
vUV = uv;
}
Фрагмент шейдера:
uniform sampler2D map;
varying vec2 vUV;
void main(void) {
float g = texture2D(map, vUV).g;
vec4 c = vec4(g, g, g, 1.0);
gl_FragColor = c;
}
Выход:
Я ожидаю увидеть только большой мягкий круг, но, как вы можете видеть в углах изображения ниже, кажется, что (некоторые?) Данные красного канала показывают. Почему это происходит, и как я могу показать только зеленый канал?
Вывод фрагмента шейдера:
Если я использую texture2D(map, uv).r
вместо этого, я получаю только данные красного канала, как я и ожидал:
ОБНОВЛЕНИЕ: Экспорт из другого редактора изображений (Krita) устраняет проблему, поэтому я думаю, что это связано с тем, как GIMP сохраняет .png.