2012-01-23 2 views
3

Я визуализирую сцену полигонов на несколько целей рендеринга, чтобы я мог выполнять эффекты постпроцессинга. Однако значения, которые я устанавливаю в шейдере фрагмента, не кажутся точно отраженными в пиксельном шейдере.WebGL визуализуют буферы, получающие искаженные значения пикселей из шейдера

Прямо сейчас трубопровод выглядит следующим образом:

  • Рендер основные полигоны (используя простой шейдер, ниже) в промежуточный буфер
  • рендер буфер в качестве экрана размером четырехъядерных на экран.

Я использую WebGL инспектор (http://benvanik.github.com/WebGL-Inspector/) для просмотра промежуточных буферов (созданные с помощью gl.createFrameBuffer()).

У меня есть очень простой пиксельный шейдер при рисовании многоугольников, что-то вроде этого:

gl_FragColor = vec4(1, 0, 0, 0.5); 

И это перед моей жеребьевкой вызова:

gl.disable(gl.BLEND); 

Я бы ожидать, чтобы это создать пиксель буфер со значением точно (255,0,0,128), но на самом деле он создает пиксель со значением (255,0,0,64) - вдвое больше альфа, чем ожидалось.

Программа довольно большая и туманная, поэтому я буду обновлять сообщение с конкретными деталями, если ответ не сразу станет очевидным.

Спасибо!

+0

Откуда вы знаете, что такое альфа-значение этого пикселя? Что вы рисуете, что пишете это значение пикселя. –

+0

Я боюсь, что нам, вероятно, понадобится немного больше информации, но одна мысль сразу приходит в голову: у вас есть сглаживание? Если да, и если выбранный вами пиксель находится на краю многоугольника, он может быть смешано с более низким, чем ожидалось, значением. – Toji

+0

@NicolBolas: Я проверил значение пикселя напрямую с помощью WebGL Inspector, сэмплируя его экранное значение в окончательном рендере, а также наблюдал его поведение на последующих этапах обработки. Значение извлекается из простого многоугольника с указанным выше простым шейдером фрагмента на нем, в фреймбуфер, и этот фреймбуфер затем отображается в экранный буфер. – Ipsquiggle

ответ

1

У вас есть preultiplyAlpha установлен в true? Вообщем это первое, что пришло в голову: странные альфа-значения.

+0

Я бы ожидал, что это будет возиться с значениями RGB, а не значениями A, но я хочу проверить это. – Ipsquiggle

Смежные вопросы