Мне нужно визуализировать сцену 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 — это текстура, которую я рендерил, а затем передал в шейдер. Что здесь может происходить?
Возможно, ваши текс-координаты выключены. Ваш код, мои комментарии:
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??
Ваш код для визуализации квадратора выглядит нормально, так что это может указывать на несоответствие размера квадрата и размера области просмотра.
Могли ли вы случайно изменить ширину и высоту при создании текстуры рендеринга?