Почему texture2D (map, uv) .g содержит данные из других цветовых каналов? - PullRequest
1 голос
/ 11 мая 2019

Я пытаюсь использовать 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.

...