Альфа-функции в WebGL? - PullRequest
       18

Альфа-функции в WebGL?

4 голосов
/ 02 сентября 2011

Можно ли добиться эффекта прозрачности, когда фрагменты с альфа-значением ниже 0,5 отбрасываются, а фрагменты с альфа-значением выше 0,5 оказываются непрозрачными? Из того, что я прочитал,

glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_GREATER, 0.5); 

будет то, что я ищу, но, к сожалению, AlphaFunction не определена в WebGL. Есть ли обходной путь?

Моя проблема в том, что прозрачные фрагменты записываются в буфер глубины и, таким образом, препятствуют визуализации более дальних фрагментов: alpha_error http://gebackene -ente.at / nudelsalat / sonstiges / pointcloud_alphaerror.jpg

Сортировка невозможна, потому что точек слишком много.

Ответы [ 2 ]

13 голосов
/ 02 сентября 2011

Используйте свой шейдер, чтобы сделать это. В нижней части вашего фрагментного шейдера, после установки выходного цвета:

if(gl_FragColor.a < 0.5)
  discard;
4 голосов
/ 02 сентября 2011

Вы можете полностью удалить фрагменты в фрагментном шейдере, используя оператор discard. Так что просто посмотрите туда альфа из текстуры (или где-то еще), а затем просто позвоните

if(alpha < 0.5)
    discard;

Так что вам даже не нужно распространять альфу на цвет, или вы можете сделать тест зависимым от чего-то еще. Это современный способ проведения альфа-тестирования, так как он устарел в настольном компьютере GL 3+.

...