2014-12-08 4 views
1

В настоящее время работает над проектом видеоигр.OpenGL ES 2 Краска для текстуры атласа текстуры

Когда я получаю:

Matrix.orthoM(projectionMatrix, 0, 0, widthwindows, heightwindows, 0, -1, 3); 

Все выглядит нормально. Но когда переменная widthwindows отличается от реального разрешения экрана, теперь я получаю этот эффект.

enter image description here

Я не могу использовать precited решения от другой темы, потому что некоторые из моих плиток кривые или любого другие, так что даже с -0.5 pixel существует никакого эффекта на них, они до сих пор получить прозрачность вокруг них (и даже некоторые плиток Арен 't при принятии 64*64, но 12*64 например, поэтому -0.5 pixel не получите эффекта).

+0

Я бы попытался отключить отображение mip на этом атласе, но это, вероятно, вызовет другие проблемы, в любом случае вы можете попробовать. –

+0

Уже сделано, и никаких изменений. После использования gemserk процесс на атласе текстуры другом, поскольку я не знаю, как запустить этот. Кажется, что больше не получайте прозрачную границу, но я все равно получаю их, когда я перемещаю матрицу слева или справа. Я не получаю их, когда я нахожусь в положении 0 и максимальном диапазоне, например. Итак, 2 вещи, прежде всего, если кто-то может помочь мне запустить это: [link] (https://github.com/gemserk/imageprocessing), и если кто-нибудь поймет, почему, когда я перемещаю матрицу, она всегда появляется? – disclique

ответ

1

Возможно, вы захотите работать с PMA (Pre Multiplied Alpha). Когда вы рисуете спрайт с прозрачностью, вы много раз используете режим смешивания Normal. Обычный режим смешивания берет цвет пикселя спрайта, который умножает его на альфа этого пикселя и добавляет его в цвет фона, умноженный на 1 комплимент пикселя источника. Это работает большую часть времени, однако при масштабировании и фильтрации спрайта это может привести к тому, что полупрозрачные пиксели будут выглядеть темнее, чем они должны.

Для этого вы используете PMA. Поскольку в смешивании вы собираетесь умножить цвет спрайта на альфа-эльфа, вы можете вместо этого сохранить цвет пикселя, уже умноженный на его альфу. Теперь режим смешивания будет выглядеть следующим образом: Добавьте цвет пикселя PMA (без умножения альфы) в цвет фона, умноженный на комплимент 1 исходного пикселя alpha.

В GLES 2 Нормальный режим смешивания будет выглядеть следующим образом:

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 

Режим смешивания PMA будет выглядеть следующим образом:

glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); 

Надежда это решает проблему.

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