4

FTGL でテクスチャ フォントを使用して、フォントを軸などのラベルとして複数のキャンバスにレンダリングしています。私の最初のプロットはうまくいきます。ただし、後続のすべてのキャンバスは、テクスチャ フォントを単なる黒い四角としてレンダリングします。また、実際にレンダリングされるキャンバスに一部の数値が表示されないことにも気付きました。"Center Time" には 8.3956 が表示されるはずですが、代わりに次のように表示されます。

ここに画像の説明を入力

フォントのレンダリングは次のとおりです。

    glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
    PushGLMatrices();
            GrSetPixelProjection();
            glTranslatef(pixelX, pixelY, 0.0);
            glRotatef(ang, 0.0, 0.0, 1.0);
            savedFont->Render(label);
    PopGLMatrices();

どこ

    void PushGLMatrices()
    {
            glMatrixMode(GL_PROJECTION);
            glPushMatrix();
            glMatrixMode(GL_MODELVIEW);
            glPushMatrix();
    }

void PopGLMatrices()
{
    glMatrixMode(GL_PROJECTION);
    glPopMatrix();
    glMatrixMode(GL_MODELVIEW);
    glPopMatrix();
}

色と深度のビットをクリアする、glEnable(GL_TEXTURE_2D); など、いくつか試してみました。glDisable(GL_DEPTH_TEST); しかし、それは役に立たなかったようです。何らかの理由で、テキストの幅を返すルーチンの 1 つに FTTextureFont::FaceSize(int) を追加すると、(ゆっくりではありますが) すべてが正しく表示されます。FTGL ソース コードを見ると、FaceSize() が glDeleteTexture() 呼び出しを除いて openGL パラメーターを操作するようには見えないので、なぜこれが機能するのか少し混乱しています。

4

4 に答える 4

1

後続のプロットを描画すると、アルファブレンディングが無効になっているようです。テキストをレンダリングする前に、有効になっていることを確認してください。

glEnable(GL_BLEND);
于 2013-01-05T11:53:46.940 に答える
0

次の場合に発生する可能性があります。

  1. openglレンダリングのスレッドとftgl::Renderのスレッドは同じではありません。
  2. フルスクリーンモードに入ります(すべてのテクスチャをリセットしてリロードする必要があります)。
  3. Z位置(順序)が正しくありません。最初にフォントをレンダリングしてから画像をレンダリングするか、最初に画像をレンダリングしてからフォントをレンダリングします。
  4. glDeleteTexture()はそれを行うことができます。
于 2013-03-10T13:22:11.277 に答える
0

IIRC、OpenGL テクスチャはコンテキスト内で作成され、各ウィンドウには個別のコンテキストがあります。FTGL は共有コンテキストの概念を使用しないため (どこかでこれを行う方法があると読みました)、最も簡単な方法は、すべてのウィンドウに対して新しい FTTextureFont をインスタンス化し、各ウィンドウを設定した後に各 FaceSize をロードすることです (たとえば、Freeglut の glutSetWindow(id))。これにより、すべてのウィンドウ/コンテキストのテクスチャが一度に読み込まれます。

FTTextureFont の唯一の問題は、FaceSize を変更するたびに、FreeType を使用してすべてのグリフをリロードし、テクスチャを再度生成することです。これは非常に遅いです。誰かがいつかそれを修正する必要があります。この問題を回避するには、アプリケーションで使用する必要がある FTTextureFont PER ウィンドウ PER サイズを 1 つ作成します。

于 2016-10-14T19:04:33.390 に答える
0

同様の問題があり、これを追加して解決しました:

_font->FaceSize(fontsize);

レンダリングするテキストを更新するとき。

この関数呼び出しは古いテクスチャを削除し、新しいテキストは正常に表示されます

于 2015-10-28T09:59:21.093 に答える