Как сделать так, чтобы свечение оставалось неизменным на фоне, даже если я использую аддитивное смешивание? - PullRequest
0 голосов
/ 20 июля 2011

Я использую openGL и программирую на iPhone.

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

В настоящее времяэто моя единственная идея:

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

Проблемы - Текстура всегда будет непрозрачной (черный - это мой glClearцвет).Я еще не знаю, как удалить весь черный цвет из текстуры, которую я рендерил.

Есть предложения?

1 Ответ

1 голос
/ 20 июля 2011

Вы можете визуализировать текстуру с альфа-каналом и смешать ее. Но это снова изменит внешний вид вашего луча. Смешивание всегда вносит некоторые изменения во внешний вид, вы не можете обойти это.

Формула смешивания:

Destination = Incoming * Incoming_Blend_Factor + Original * Original_Blend_Factor

Если вы хотите, чтобы ваш цвет был таким же, это равняется

Destination = Incoming

, что при сравнении коэффициентов

Destination = Incoming * 1 + Original * 0

т.е. не смешивая вообще.


В качестве упражнения я даю вам следующее: в Photoshop или GIMP, но какое-то фоновое изображение в фоновый слой, а ваш луч в слой поверх него. Затем попробуйте получить желаемый результат, повозившись с доступными режимами наложения.

...