0

OpenGLシーン上に2Dオーバーレイを描画する必要があります。OpenGLは2Dアニメーションに使用され、正射影でテクスチャ2D長方形を描画するだけです。これは、次の描画コードです。

//ビューポートはウィンドウクライアント領域全体に設定されます
// m_fRectX、m_fRectYはOnSizeで計算され、定義されます
//画像描画用のサブ長方形
// m_nImageWidth、m_nImageHeightはテクスチャの寸法です

glClear(GL_COLOR_BUFFER_BIT);
glEnable(GL_TEXTURE_RECTANGLE_ARB);
glBegin(GL_TRIANGLE_STRIP);

glTexCoord2d(0.0f、(float)m_nImageHeight);
glVertex2d(-m_fRectX、-m_fRectY);
glTexCoord2d((float)m_nImageWidth、(float)m_nImageHeight);
glVertex2d(+ m_fRectX、-m_fRectY);
glTexCoord2d(0.0f、0.0f);
glVertex2d(-m_fRectX、+ m_fRectY);
glTexCoord2d((float)m_nImageWidth、0.0f);
glVertex2d(+ m_fRectX、+ m_fRectY);

glEnd();
SwapBuffers(m_hDC);

私の要件:

  1. パフォーマンスは重要です。

  2. Windows固有のAPIが許可されています。

  3. テキストと画像のオーバーレイ(アイコンスタイル)が必要です。

  4. オーバーレイの位置とサイズを定義する唯一の要因は、ウィンドウクライアントの領域サイズです(私の場合はOpenGLビューポートと同じです)。

この場合、どのような手法が適していますか?

4

1 に答える 1

3

OpenGLを使用してテキストを描画する最もパフォーマンスの高い方法は、ビットマップフォントを使用することです。これは、テクスチャにマッピングされた小さなクワッドを使用してテキストをレンダリングします。ただし、いくつかの欠点もあります。この種のレンダリングでは、フォントテクスチャがベイク処理される解像度からスケールアップするのが難しくなります(不可能ではありません)。私はAngelCodeのビットマップフォントジェネレーターが好きで使用していますが、このようなツールはたくさんあります。ニーズに合ったものをお選びいただけます。

もう1つのオプションは、アウトラインフォントを使用することです。これは、品質を損なうことなくサイズを拡大または縮小できますが、wglUseFontOutlinesを使用します。

3番目で最も難しい(ただし、最高品質のもの)は、テキストを自分でレンダリングすることです。Microsoft Researchによるこの論文には、GPU上でベクターアートをレンダリングするための非常に優れたテクニックがいくつかあります。このGPUGemsの記事は、その方法を示しています。

パフォーマンス、複雑さ、品質の間には多くのトレードオフがあります。どちらを使用するかを決定する前に、それぞれの長所と短所を理解することが重要です。

于 2012-06-19T15:16:54.603 に答える