8

テキストの色が正しく設定されていない次のコードの問題を誰かが追跡するのを手伝ってくれるかどうか疑問に思っています(背景の色をレンダリングするだけです)

void RenderText(int x, int y, const char *string)
{
int i, len;

glUseProgram(0);

glLoadIdentity();
glColor3f(1.0f, 1.0f, 1.0f);
glTranslatef(0.0f, 0.0f, -5.0f);
glRasterPos2i(x, y);

glDisable(GL_TEXTURE_2D);
for (i = 0, len = strlen(string); i < len; i++)
{
    glutBitmapCharacter(GLUT_BITMAP_8_BY_13, (int)string[i]);
}
glEnable(GL_TEXTURE_2D);
}

テクスチャリングの無効化、rasterPosの前の色の設定など、通常のことをすべてチェックしました。シェーダーを無効にしましたが、まだ問題があります。

4

3 に答える 3

10

glDisable(GL_LIGHTING)文字列を描く前に忘れていたようです。

于 2011-11-23T09:16:52.377 に答える
3

OpenGL ビットマップには色は保存されません (これがglutBitmapCharacter作成されたものです。ビットマップはモノクロで、形状のみを保存します。

ビットマップが描画されるとき (たとえばglBitmap、またはおそらくglDrawLists)、現在のラスター カラーが使用されます。ラスター カラーは常にアクティブな色と同じではありません。 http://www.opengl.org/wiki/Coloring_a_bitmapを参照してください。

于 2011-03-20T02:19:40.170 に答える
0

通常、色は glColor3f 関数で制御されるため、テキストが白であってはならない場合は、次の変更が役立ちます。

glLoadIdentity();
glColor3f(0.5f, 0.5f, 0.5f);     //<-- this line controls the color (now text is gray)
glTranslatef(0.0f, 0.0f, -5.0f);
glRasterPos2i(x, y);

また、glDisable(GL_TEXTURE_2D) と glEnable(GL_TEXTURE_2D) を呼び出す必要はありません。代わりに、 glBindTexture(GL_TEXTURE_2D,0) を呼び出してテクスチャを無効にし、同じ関数を使用してアクティブなテクスチャを設定できます。初期化関数で glEnable(GL_TEXTURE_2D) を呼び出すようにしてください。

于 2011-03-20T01:26:35.537 に答える