Смешивание нескольких текстур для создания системы частиц - PullRequest
1 голос
/ 02 января 2011

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

скажем, Rx, Bx, Gx - это цвет каждого пикселя, когда только 1 полигон на странице и пиксель внутри него. Теперь у нас есть n полигонов, каждый из которых имеет одинаковый размер и текстуру.

Rtotal = R1 / n + R2 / n + ... + Rn / n то же самое для Gtotal и Btotal

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

Кстати, вот инициализация.

glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glEnable(GL_DEPTH_TEST) ;
glDepthFunc(GL_ALWAYS);

glEnable(GL_NORMALIZE);
glColor4f(.5,.5, .5,.2); 
glBlendFunc (GL_SRC_ALPHA, GL_DST_ALPHA);

1 Ответ

1 голос
/ 02 января 2011

Трудно сделать результат точно таким, каким вы хотите его видеть, поскольку вам нужно знать для каждого пикселя , сколько фрагментов было.

Если вам достаточно, чтобы частицы выглядели нормально, этого должно быть достаточно, чтобы изменить режим смешивания.

Они накапливаются в белом, потому что вы, вероятно, используете аддитивное смешивание альфа:

result = source_color*source_alpha + destination_color

Или смешивание простых добавок:

result = source_color + destination_color

(где источник - «цвет данного фрагмента», а пункт назначения - «то, что уже было в кадровом буфере в этом месте»).

Оба из них распадаются на белый с большим количеством "слоев". Но вы можете использовать «истинное» альфа-смешение:

result = source_color * source_alpha + destination_color * (1-source_alpha)

, который не распадется на белый.

В OpenGL это соответствует:

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

Это не совсем то, что вы хотели, так как результат будет зависеть от порядка, но он должен быть на 100% достаточным для системы частиц. Надеюсь, это поможет.

(Также не забудьте визуализировать геометрию твердого тела перед частицами и отключить z-запись.)

...