OpenGL текстурные глюки с полосами отображения пикселей (не границы)

Я работаю над алгоритмами демозаики OpenGL Bayer, и, хотя мне, похоже, удалось заставить эти методы работать, я иногда получаю сбои в выводе и не могу понять, почему. Смотрите изображения здесь: https://imgur.com/a/gz5YL. Полосы встречаются только на определенных масштабах поверхности, на большинстве масштабов (возможно, на 99%) никаких глюков нет.

Вершинный шейдер:

vec2 invTexSize = 1.0/texSize;
centerCoord = floor(vertexIn*texSize) + 0.5;
centerTexCoord = centerCoord * invTexSize;

Xoffsets = centerTexCoord.x + vec2(-invTexSize.x, invTexSize.x);
Yoffsets = centerTexCoord.y + vec2(-invTexSize.y, invTexSize.y);

gl_Position = mvp_matrix * vec4(vertexIn.xy,0.0,1.0);

Фрагмент шейдера:

float center = texture2D(source, centerTexCoord).r;

vec4 diags = vec4(
texture2D(source, vec2(Xoffsets.x, Yoffsets.x)).r,          // (-1,-1)
texture2D(source, vec2(Xoffsets.x, Yoffsets.y)).r,          // (-1, 1)
texture2D(source, vec2(Xoffsets.y, Yoffsets.x)).r,          // ( 1,-1)
texture2D(source, vec2(Xoffsets.y, Yoffsets.y)).r);         // ( 1, 1)

vec2 horiz = vec2(
texture2D(source, vec2(Xoffsets.x, centerTexCoord.y)).r,    // (-1, 0)
texture2D(source, vec2(Xoffsets.y, centerTexCoord.y)).r);   // ( 1, 0)

vec2 vertic = vec2(
texture2D(source, vec2(centerTexCoord.x, Yoffsets.x)).r,    // ( 0,-1)
texture2D(source, vec2(centerTexCoord.x, Yoffsets.y)).r);   // ( 0, 1)

float GREEN4 = (horiz.x + horiz.y + vertic.x + vertic.y)/4.0;
float DIAG4 = (diags.x + diags.y + diags.z + diags.w)/4.0;
float H2 = (horiz.x + horiz.y)/2.0;
float V2 = (vertic.x + vertic.y)/2.0;

// Branching
vec2 branch = mod(floor(centerCoord), 2.0);
gl_FragColor.rgb =  (   branch.y == 0.0) ?
((      branch.x == 0.0) ?
vec3(center,GREEN4,DIAG4) :
vec3(H2,center,V2)) :
((      branch.x == 0.0) ?
vec3(V2,center,H2) :
vec3(DIAG4,GREEN4,center));

Вершины определяются как

float vertices[] = {0.0f,   0.0f,
0.0f,   1.0f,
1.0f,   0.0f,
1.0f,   1.0f};

Фильтры установлены в GL_NEAREST. texSize — размер загруженного изображения текстуры в пикселях. Просто для удобства (?) Я использую те же координаты вершины и текстуры [0,1], и mvp настроен соответственно для сохранения соотношения сторон. Я использую Qt5.5 MSVC32, и глюки были воспроизведены на совершенно другом оборудовании.

Я играл со многими различными методами отображения (корректировка координат текстуры и т. Д.). Некоторые из них, кажется, дают лучшие результаты (реже сбои), чем другие, и из-за этого я думаю, что причиной может быть что-то вроде недостаточно точных текстурных координат. В какой-то момент, по крайней мере, я подумал, что проблема исчезла, когда я не использовал mvp для поддержания соотношения сторон, но я просто представлял, может ли это изменить ситуацию?

Есть идеи, что может быть причиной этого?

Некоторая часть кода обязана графике graphics.cs.williams.edu/papers/BayerJGT09/

Образец изображения CFA находится на сайте www.cs.unc.edu/~lazebnik/spring09/assignment1.html.

ОБНОВЛЕНИЕ 6.12.2015:
Скрестив пальцы, я думаю, что добился хорошего прогресса, выбирая с помощью ненормализованных координат текстуры

texelFetch(source, ivec2(x, y), 0).r

вместо texture / texture2D. Я отменил все настройки текстурных координат в стиле фанк и передал вершины [0, размер] в:

centerCoord = vertexIn;

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

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector