Android Opengl ES темные пиксели на краю объектов - PullRequest
3 голосов
/ 30 ноября 2010

Я хотел бы обратить ваше внимание на следующие изображения

Сначала исходное изображение

alt text

, а затем то, как оно отображается на экране

alt text

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

, но когда я рендеринг, у меня есть некоторые затемненные пикселикоторые появляются.

Чтобы избежать обычного ответа, я получаю

Я использую

gl.glTexImage2D(GL10.GL_TEXTURE_2D, level, GL10.GL_RGBA, width, height, 0, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, pixelBuffer);

, а не инструмент для глютинга

также

gl.glEnable(GL10.GL_BLEND);
gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);

У кого-нибудь есть решение для этого?

Спасибо

Джейсон


Редактировать

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


редактировать на самом деле, похоже, проблема.Я проверил значения открываемого растрового изображения, значения для прозрачных пикселей - 0,0,0,0 вместо цвета, который я установил.Это проблема с растровым изображением или как я создал свое изображение?

// Load up, and flip the texture:
            Bitmap temp = BitmapFactory.decodeResource(context.getResources(), resource, opts);
            Bitmap bmp = Bitmap.createBitmap(temp, 0, 0, temp.getWidth(), temp.getHeight(), flip, true);
            temp.recycle();

Ответы [ 2 ]

2 голосов
/ 30 ноября 2010

Каков цвет фона вашего изображения?т.е. как это выглядит при удалении альфа-канала?Я угадаю - это черный?Попробуйте придать цвету фона тот же цвет, что и у вашего логотипа (т. Е. Желтоватый), и попробуйте снова.

РЕДАКТИРОВАТЬ: Можно также отредактировать ответ на основе комментариев.Даже если вы правильно установите цвет RGB для окружающих пикселей, некоторые форматы сжатия изображений все равно могут «оптимизировать» это и превратить все полностью прозрачные пиксели в (0,0,0,0), что вызовет проблемы, которые вы описываете при использованиибилинейная фильтрация.Попробуйте использовать другой формат файла, или проведите исследование, чтобы выяснить, можно ли отключить эту функцию при данном конкретном сжатии, или рассмотрите возможность исправления изображения в коде после загрузки.

1 голос
/ 30 ноября 2010

Возможно, ваше изображение имеет предварительно умноженные альфа-значения.Попробуйте использовать gl.glBlendFunc(GL10.GL_ONE, GL10.GL_ONE_MINUS_SRC_ALPHA);

См. этот пост для более подробной информации.

...