Рендеринг в текстуру, затем рендеринг результата на экран в OpenGL

Мне нужно визуализировать сцену OpenGL в текстуру, чтобы затем манипулировать этой текстурой в шейдере. Я решил это с помощью объектов Framebuffer, которые, как мне кажется, я уже достаточно хорошо понимаю. Во многих точках моего конвейера эффектов мне нужно визуализировать полноэкранный квад и текстурировать его динамически отображаемой текстурой, в чем и заключается моя проблема.

Вот как выглядит моя сцена: https://www.mathematik.uni-marburg.de/~thomak/planet.jpg

Я рендерил это в текстуру и отображал эту текстуру в полноэкранный квад. Однако полученное изображение искажается следующим образом: https://www.mathematik.uni-marburg.de/~thomak/planettexture.jpg

Вот код, который визуализирует квад и устанавливает координаты текстуры:

glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
glBegin(GL_QUADS);

glTexCoord2i(0, 0);
glVertex3i(-1, -1, -1);
glTexCoord2i(0, 1);
glVertex3i( 1, -1, -1);
glTexCoord2i(1, 1);
glVertex3i( 1,  1, -1);
glTexCoord2i(1, 0);
glVertex3i(-1,  1, -1);

glEnd();
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glPopMatrix();

И код шейдера здесь:

sampler2D BlitSamp = sampler_state
{
MinFilter = LINEAR;
MagFilter = LINEAR;
MipFilter = LINEAR;
AddressU = Clamp;
AddressV = Clamp;
};

float4 AlphaClearPS(float2 texcoords : TEXCOORD0) : COLOR
{
return float4(tex2D(BlitSamp, texcoords).rgb, 1.0f);
}

Где BlitSamp — это текстура, которую я рендерил, а затем передал в шейдер. Что здесь может происходить?

1

Решение

Возможно, ваши текс-координаты выключены. Ваш код, мои комментарии:

glTexCoord2i(0, 0);     //Bottom-Left
glVertex3i(-1, -1, -1); //Bottom-Left

glTexCoord2i(0, 1);     //Top-Left
glVertex3i( 1, -1, -1); //Bottom-Right???

glTexCoord2i(1, 1);     //Top-Right
glVertex3i( 1,  1, -1); //Top-Right

glTexCoord2i(1, 0);     //Bottom-Right
glVertex3i(-1,  1, -1); //Bottom-Left??
2

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

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

Могли ли вы случайно изменить ширину и высоту при создании текстуры рендеринга?

1

По вопросам рекламы [email protected]