Je dois rendre une scène OpenGL à une texture afin de manipuler ensuite cette texture dans un shader. J'ai résolu ceci en utilisant des objets de Framebuffer, que je pense que je comprends assez bien maintenant. À de nombreux points dans mon pipeline d'effets, j'ai besoin de rendre un quad fullscreen et de le texturer avec la texture rendue dynamiquement, ce qui est mon problème.Rendu à une texture, puis rendu résultat à l'écran dans OpenGL
C'est ce que ma scène ressemble à: https://www.mathematik.uni-marburg.de/~thomak/planet.jpg
Je rends ce à une texture et carte que la texture à un quad en plein écran. Cependant, l'image résultante est déformée de cette façon: https://www.mathematik.uni-marburg.de/~thomak/planettexture.jpg
Voici le code qui rend les coordonnées quad et définit la texture:
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();
Et le code shader est ici:
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);
}
Où BlitSamp est la texture que j'ai rendue puis transmise au shader. Que pourrait-il se passer ici?
Merci, vous êtes sur! Je transfère essentiellement une application Direct3D à OpenGL et je ne savais pas qu'ils étaient en désaccord sur l'origine de l'espace UV ... Je sais que c'est en haut à gauche dans Direct3D, est-ce qu'il est en bas à gauche dans OpenGL? – Campusanis
Ils sont généralement en bas à gauche dans OpenGL, oui. Heureux de vous aider! – bfishman