Проблемы при обработке изображения с использованием OpenGL ES 2.0 - PullRequest
1 голос
/ 15 марта 2011

Я сделал простое приложение, которое берет входное изображение и выводит обработанное изображение, используя фрагментный шейдер. При использовании изображения 2 ^ n все в порядке. Но если я использую прямоугольное изображение без степени 2, я получаю черную строчку, идущую сверху вниз.

Это оригинал:

enter image description here

Это после обработки:

enter image description here

Вот мой фрагментный шейдер:

precision mediump float;
uniform vec2 uSize;
uniform sampler2D sTexture;
void main()
{
    gl_FragColor = texture2D(sTexture, vec2(gl_FragCoord) / uSize)
}

Где, uSize - это vec2 с размером изображения

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

Спасибо!

UPDATE

Вот мои вершины:

static GLfloat vVertices[] =
    {
     -1.0f,  1.0f, 0.0f,
     -1.0f, -1.0f, 0.0f,
      1.0f, -1.0f, 0.0f,

      1.0f, -1.0f, 0.0f,
      1.0f,  1.0f, 0.0f,
     -1.0f,  1.0f, 0.0f,
    };

А вот вершинный шейдер:

attribute vec4 vPosition;
void main()
{
   gl_Position = vPosition;
}

UPDATE

Теперь это странно. Вот два треугольника, представленные отдельно (сначала с использованием первых 3 вершин, а затем с использованием следующих (последних) трех).

Здесь перейдем к квадратному изображению (как и ожидалось):

enter image description here enter image description here

А вот как выглядят одинаковые треугольники для изображения / текстуры прямоугольника. Они выглядят странно :

enter image description here enter image description here

Они совсем не похожи на треугольники. Кто-нибудь знает, что происходит?

Ответы [ 2 ]

1 голос
/ 16 марта 2011

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

Тем не менее каждый пиксель без артефактов является идеальным соответствием между двумя изображениями, что, как мне кажется, исключает отдельные ошибки, о которых я думал.Мало того, что артефакт на самом деле основан на одном из цветных каналов, которые были полностью стерты.(Для каждой серии из 3 пикселей первая имеет R = 0, вторая имеет G = 0, а третья имеет B = 0).

В целом, это похоже на ошибку, которая совершенно не связана с шейдером или чертежом.Вы уверены, что это не то, что мешает чтению поста в памяти?Это также может быть ошибка платформы (ч / б, драйвер ...).Это воспроизводимо на нескольких платформах?

0 голосов
/ 28 августа 2011

Кажется, что драйверы были плохими. Обновление их решило проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...