1

私はすでに進行中のゲームのアイデアを実装するためにエンジン(http://b2dengine.com/)に取り組んでいます。今、私はかなり長い間、テキストレンダリングに関するこの問題に悩まされています。

1つのpng画像にサポートされている/必要なすべての文字を含むテクスチャアトラスがあります。文字マッピングはFontクラスによって定義されます。すべてが正常に機能し、文字が正しく正確にレンダリングされます。テキストの色を変更する機能も必要です。これは聞こえます、そして私はそれが単純であるに違いありません、しかし私はそれを機能させることができません。

このglブレンド関数を使用して、目的の効果を取得しています。

GL.instance.glBlendFunc(GL.instance.GL_SRC_ALPHA, GL.instance.GL_ONE_MINUS_SRC_ALPHA);

ほとんどの場合、色がやや暗い限り、うまく機能します。しかし、白に設定すると、アーティファクトが表示されます。必要に応じてスクリーンショットを提供できます。また、これが機能するには、テクスチャの「テキスト」が白である必要があります。

私はopengl1.1を使用しています(はい、古いことは知っていますが、シェーダーの準備ができていません)。

つまり、私の質問は、テクスチャをレンダリングして色を完全に置き換える方法です。アルファチャネルのみを保持します。たとえば、pngで黒と80%の透明度がある場合、レンダリングするときに、画面上で80%の透明度で緑にします。

4

1 に答える 1

1

これらは古くから廃止された関数であり、もうあまり覚えていませんが、これでうまくいくと思います

テキストテクスチャを持つテクスチャユニットをアクティブにして、次のオプションを設定してみてください。

glTexEnv(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_REPLACE);
glTexEnv(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE);
glTexEnv(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_PRIMARY_COLOR);
glTexEnv(GL_TEXTURE_ENV, GL_SRC0_ALPHA, GL_TEXTURE);

これにより、フラグメントのRGBが入力フラグメントカラー(glColor)に置き換えられ、テクスチャのRGBチャネルが完全に無視されると思います。そうは言っても、最初にアルファチャンネルテクスチャをアップロードした方がはるかに良いでしょう。

エラーがないかどうかを確認してください。機能しない場合は、ここから何かを間違って取得したかどうかを確認できます:http ://www.opengl.org/sdk/docs/man/xhtml/glTexEnv.xml

于 2012-09-09T22:17:37.640 に答える