Пишу для себя небольшой raycasting движок по книге Андре ЛаМота. Отрисовку стен делаю не по столбцам, а целыми фрагментаим для каждой отдельной стены. Процедура выглядит примерно следующим образом:

//---------------------------------------------------------------------
glActiveTexture (GL_TEXTURE0);
glEnable (GL_TEXTURE_2D);
//---------------------------------------------------------------------
//---------------------------------------------------------------------
// Выбираем предварительно загруженное изображение
glBindTexture (GL_TEXTURE_2D, idTextures[0]);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameterf (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); // GL_CLAMP
glTexParameterf (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); // GL_REPEAT
// Загрузка текстуры в память видеокарты
glTexImage2D (GL_TEXTURE_2D, 0, GL_RGB8, image->width, image->height, 0, image->format, image->internalFormat, (const GLvoid*)image->data);
//---------------------------------------------------------------------
glBegin(GL_QUADS);
for (unsigned int i = 0; i < theCells.size(); i++)
{
// Коэффициент подобия
//---------------------------------------------------------------------
float leftColumn = (cell->size * (projPlane->focalLength / theCells[i]->startDistance));
float topLeft = (projPlane->height - leftColumn) * 0.5f;
float bottomLeft = topLeft + leftColumn;
float rightColumn = (cell->size * (projPlane->focalLength / theCells[i]->endDistance));
float topRight = (projPlane->height - rightColumn) * 0.5f;
float bottomRight = topRight + rightColumn;
//---------------------------------------------------------------------
// GL_QUADS
//---------------------------------------------------------------------
glTexCoord2f(theCells[i]->startOffset / (float)cell->size, 0.0f);
glVertex2i( theCells[i]->startScrX, topLeft ); // Bottom left
glTexCoord2f(theCells[i]->endOffset / (float)cell->size, 0.0f);
glVertex2i( theCells[i]->startScrX + (theCells[i]->endScrX - theCells[i]->startScrX), topRight );
glTexCoord2f(theCells[i]->endOffset / (float)cell->size, 1.0f);
glVertex2i( theCells[i]->startScrX + (theCells[i]->endScrX - theCells[i]->startScrX), bottomRight );
glTexCoord2f(theCells[i]->startOffset / (float)cell->size, 1.0f);
glVertex2i( theCells[i]->startScrX, bottomLeft );
//---------------------------------------------------------------------
}
glEnd();
glDisable(GL_TEXTURE_2D);
При этом текстуры "плавают" (не знаю как объяснить по другому). Искажение происходит из-за того, что стены рисуются квадратом со сторонами разной высоты. С OpenGL знаком плохо и не представляю, куда копать дальше. Результат хотелось бы получить аналогичный софтверному рендеру.