Я пытаюсь создать некоторые чересстрочные изображения для вывода на 3DTV. Мой метод использует буфер трафарета OpenGL для рисования сетки строк на каждой четной строке пикселей. На моем ноутбуке результирующее изображение выглядит с чередованием, но когда я выводю на 3DTV (через кабель HDMI), похоже, что строки не нарисованы на каждом четном ряду пикселей. Вертикальное разрешение моего ноутбука и телевизора составляет 1080 пикселей. Используемые ниже координаты экрана варьируются от (-1, -1) для нижнего левого угла экрана до (1, 1) для верхнего правого. Вот код, который я использую, чтобы нарисовать сетку в буфере трафарета. Я был бы признателен, если бы кто-нибудь мог здравомыслием проверить это для меня, чтобы увидеть, что я делаю что-то принципиально неправильно. Если мой код в порядке, проблема может заключаться в изменении размера телевизора на выходе с ноутбука.Переплетение GLSL, кажется, пропускает даже строки на 3DTV
glEnable(GL_STENCIL_TEST);
glClearStencil(0);
glClear(GL_STENCIL_BUFFER_BIT);
glStencilOp (GL_REPLACE, GL_REPLACE, GL_REPLACE);
glDisable(GL_DEPTH_TEST);
glStencilFunc(GL_ALWAYS,1,1);
const int stencilsize = 2500;
// hardcoding 2500, not the greatest solution in the world i know...
GLfloat stencilVertices[stencilsize] = {0.0};
//if we know the window height, we can draw a line in the stencil buffer on even row of pixels in the window
currheight = 1080;
GLint i = 0;
GLfloat ht = -1;
/*start ht @ -1, increase by 4/currheight each time, until 1 is reached*/
while ((ht < 1) && (i < stencilsize-4))
{
stencilVertices[i] = -1; //left edge of screen
i++;
stencilVertices[i] = ht; //current line's y coord
i++;
stencilVertices[i] = 1; //right edge of screen
i++;
stencilVertices[i] = ht; //current line's y coord
i++;
ht += 4.0/currheight; //increase ht by (4/(height of window)) each time to mark even rows only (until ht == 1)
}
glGenBuffers(1, &m_ui32Stencilpattern);
glBindBuffer(GL_ARRAY_BUFFER, m_ui32Stencilpattern);
glBufferData(GL_ARRAY_BUFFER, (stencilsize * sizeof(GLfloat)), stencilVertices, GL_STATIC_DRAW);
glEnableVertexAttribArray(VERTEX_ARRAY);
glVertexAttribPointer(VERTEX_ARRAY, 2, GL_FLOAT, GL_FALSE, 0, 0);
glDrawArrays(GL_LINES, 0, stencilsize);
@EmileCormier Я не знаю, что это имеет отношение к гамедеву, хотя это и не мусорная корзина для чего-то связанного с графикой. –
@ChristianRau: Я подумал, что там будет больше экспертов OpenGL. –
@Bart: Ой, я предположил, что ему нужен код-обзор, основанный только на его названии. Виноват. –