Войти
ПрограммированиеФорумГрафика

glsl шейдер, discard внутри а снаружи if. Упрощение. (2 стр)

Страницы: 1 2
#15
20:38, 13 мая 2015

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

i - кол-во проходов или исходных текстур(как непрозрачных так и полупрозрачных, шейдер описанный выше не менял)

    glclearColor(0.0, 0.0, 0.0, 0.0);
    glclear(COLOR_BUFFER_BIT | DEPTH_BUFFER_BIT);
    glenable(BLEND);
    glblendEquation(FUNC_ADD);
    glblendFunc(ONE, ONE_MINUS_SRC_ALPHA);

    while (i--) {
        var gi = geoImagesArray[i];
        if (gi.opacity == 1.0) {
            gldisable(gl.BLEND);
        } else {
            glenable(gl.BLEND);
        }
        drawGeoImage(gi);
    }

    gldisable(BLEND);

т.е. во первых устанавливаю параметры блендинга:
glblendEquation(FUNC_ADD);
glblendFunc(ONE, ONE_MINUS_SRC_ALPHA);
а потом если текстура непрозрачная, отключаю бленд, если прозрачная включаю.
Вобщем работает. Но не совсем корректно...блин

Если кто знает как блендингом избавиться от discard в один проход без масок, буду рад совету.

Kroll
Тут я немного не понял, что такое RT? И как смешивать прозрачные и непрозрачные в твоем случае? Тут еще такое дело, важен порядок в том смысле что порядок прозрачных и непрозрачных устанавливается в некой переменной, и потом по ней сортируется для очереди на отрисовку. Как в таком случае совмещать два RT(что это? :) ) не понимаю...


#16
21:22, 13 мая 2015

Вот такой вариант дает более правильные результаты:

glblendEquation(FUNC_ADD);
glblendFunc(SRC_ALPHA, DST_ALPHA);

Но при смешивании (в шейдере alfa близкое к 1) слишком "ярчит"

#17
21:44, 13 мая 2015

Это frame buffer (render target в dx).
Я делал нестандартный бленд так. Рисовал в один frame buffer и в другой. Потом эти два буфера использовал в шейдере как текстуры, мешал их как хотел.
Ещё можно порыть в сторону Separate Alpha Blend, в Dx так называется, в GL, думаю тоже есть. RGB и A смешивает по разным формулам.

Страницы: 1 2
ПрограммированиеФорумГрафика

Тема в архиве.