1

ガウスぼかしを 256x256 テクスチャに適用したいのですが、最初のパスをフレームバッファに渡して再利用すると、実際には画像の一部になり、テクスチャが変換されたように見えます。

注目を集める

頂点シェーダー:

void main()
{
   gl_Position = ftransform();
   gl_TexCoord[0] = gl_MultiTexCoord0;
} 

フラグメント シェーダー: ぼかしのすべての部分をテスト用にのみ削除しました。

uniform sampler2D texture_0; 
uniform float switcher;
vec4 cor;

void main()
{
   cor = vec4(0.0,0.0,0.0,0.0);
   vec2 position = gl_TexCoord[0].xy;

   cor = texture2D(texture_0,position);

   gl_FragColor = cor;
}

初期化:

glGenTextures( 1, &tex1 );
glBindTexture( GL_TEXTURE_2D, tex1 );
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img1->getWidth(),img1->getHeight(), 0,GL_RGB,     GL_UNSIGNED_BYTE, data1);
glBindTexture(GL_TEXTURE_2D, 0);


glGenTextures( 1, &tex2 );
glBindTexture( GL_TEXTURE_2D, tex2 );
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img1->getWidth(),img1->getHeight(), 0,GL_RGB,  GL_UNSIGNED_BYTE, 0);
glBindTexture(GL_TEXTURE_2D, 0);

glEnable(GL_TEXTURE_2D);

glActiveTexture(GL_TEXTURE0);
glBindTexture( GL_TEXTURE_2D, tex1 );
glActiveTexture(GL_TEXTURE1);
glBindTexture( GL_TEXTURE_2D, tex2 );

glGenFramebuffers(1,&framebuffer);
glBindFramebuffer(GL_FRAMEBUFFER,framebuffer);
glFramebufferTexture2D(GL_FRAMEBUFFER,GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tex2,0);
glBindFramebuffer(GL_FRAMEBUFFER, 0);

与える:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glLoadIdentity();

glUniform1i(loc_u_texture_0, 0);
glUniform1f(loc_switcher_1, 0);

glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);

glNormal3f(0, 1, 0);
glBegin(GL_QUADS);
  glTexCoord2f(0, 0);
  glVertex3f(-2, -2,  -10);
  glTexCoord2f(1, 0);
  glVertex3f(2, -2,   -10);
  glTexCoord2f(1, 1);
  glVertex3f(2, 2,  -10);
  glTexCoord2f(0, 1);
  glVertex3f(-2, 2, -10);
glEnd();

glBindFramebuffer(GL_FRAMEBUFFER, 0);
usleep(50);

glUniform1i(loc_u_texture_0, 1);
glUniform1f(loc_switcher_1, 1);

glNormal3f(0, 1, 0);
glBegin(GL_QUADS);

  glTexCoord2f(0, 0);
  glVertex3f(-2, -2,  -10);
  glTexCoord2f(1, 0);
  glVertex3f(2, -2,   -10);
  glTexCoord2f(1, 1);
  glVertex3f(2, 2,  -10);
  glTexCoord2f(0, 1);
  glVertex3f(-2, 2, -10);
glEnd();

glutSwapBuffers();
4

1 に答える 1