1

ftgl フォント ライブラリを使用しています。

イメージを作成する ftgl 関数には次のコードがあります。

glBindTexture(GL_TEXTURE_2D, textID);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, textureWidth, textureHeight,0, GL_ALPHA, GL_UNSIGNED_BYTE, textureMemory);

GL_ALPHA をフォーマットします。

FBO 画像 (GL_RGBA) にレンダリングすると、問題なく表示されます。しかし、フォントを fbo テクスチャにレンダリングすると、色とアルファに問題が発生します。

この画像は、ピクセルに触れないエディターで開く必要があります (ブラウザーはアンチエイリアスを使用します)。


コード:

/// 1 ステップで FBO を作成

 // Create the color buffer
    glGenTextures(1, &id_tex);
    glBindTexture(GL_TEXTURE_2D, id_tex);

    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, wid, hei, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); // GL_RGBA GL_ALPHA

    // Create the frame buffer
    glGenFramebuffersEXT(1, &id_buf);
    glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, id_buf);
    glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, id_tex, 0);

    GLenum err = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
    assert(err == GL_FRAMEBUFFER_COMPLETE_EXT);
    glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);

/// fbo への 2 ステップ レンダリング

glBindTexture(GL_TEXTURE_2D, 0);    
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, id_buf);       
glEnable(GL_TEXTURE_2D);
glEnable(GL_ALPHA_TEST);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

glClearColor (0.0f, 0.0f, 0.0f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glViewport(0,0, 1920 , 1080); 

ftgl::render();

glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);                    
glDisable(GL_TEXTURE_2D);
glFlush ();     
glDisable(GL_BLEND);
glDisable(GL_ALPHA_TEST);

glViewport (0, 0, 1920, 1080);
glClearColor (0.0f, 0.0f, 0.0f, 1.0f);

/// 3 ステップ レンダリング テクスチャ

glEnable(GL_TEXTURE_2D);
glEnable(GL_ALPHA_TEST);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_COLOR);

glBindTexture(GL_TEXTURE_2D, id_tex);
glBegin(GL_QUADS); 

glTexCoord2d(0,0); glVertex3f(point4.X , point4.Y , point4.Z);
glTexCoord2d(0,1); glVertex3f(point1.X , point1.Y , point1.Z);
glTexCoord2d(1,1); glVertex3f(point2.X , point2.Y , point2.Z);
glTexCoord2d(1,0); glVertex3f(point3.X , point3.Y , point3.Z);

glEnd();
glDisable(GL_BLEND);
glDisable(GL_ALPHA_TEST);
glDisable(GL_TEXTURE_2D);
4

0 に答える 0