1

シェーダーでそのテクスチャを操作するには、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は、レンダリングしてからシェーダーに渡したテクスチャです。ここで何が起こっているのでしょうか?

4

2 に答える 2

2

tex-coordsがオフになっている可能性があります。あなたのコード、私のコメント:

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??
于 2012-09-11T22:00:15.810 に答える
1

クワッドをレンダリングするコードは正常に見えるため、クワッドのサイズとビューポートのサイズの不一致を示します。

万が一、レンダリングテクスチャを作成したときに、幅と高さを入れ替えてもらえますか?

于 2012-09-11T21:56:40.013 に答える