シェーダーでそのテクスチャを操作するには、OpenGLシーンをテクスチャにレンダリングする必要があります。フレームバッファオブジェクトを使用してこれを解決しました。これは、今ではかなりよく理解していると思います。エフェクトパイプラインの多くのポイントで、フルスクリーンクワッドをレンダリングし、動的にレンダリングされたテクスチャでテクスチャリングする必要があります。これが私の問題です。
これは私のシーンがどのように見えるかです: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は、レンダリングしてからシェーダーに渡したテクスチャです。ここで何が起こっているのでしょうか?