2

基本的な HUD のようなテキストを OpenGL/C++ プロジェクトに追加しようとしています。

したがって、私は決めました

glutBitmapCharacter( type, character) 

私の好きな武器になります。

最も簡単に使用するには、以前のレンダリング領域に 2D マトリックスを追加する必要があることに気付きました。

glPushMatrix();
glLoadIdentity();
gluOrtho2D(0, 10, 0, 10);

これで 10*10 の 2D 立方体ができあがります。

glutBitmapCharacter が最後の文字位置を記憶して次の文字位置を追加するときに問題が発生しました。文字列を書き込んでいる間はかなり賢く、明らかにこの位置を覚えていて、私のテキストを一度だけ画面全体に飛ばします:)いたずら。

glRasterPos2f(x,y);

私が聞いたように、これをリセットするのは通常のことです.

コードを実行すると、奇妙なことが起こります。

glPushMatrix();
glLoadIdentity();
gluOrtho2D(0, 10, 0, 10);

string message ="mmh... Pie...";
float poss[3];

glRasterPos3f(0.0, 0.0, 0.0);
glGetFloatv(GL_CURRENT_RASTER_POSITION, poss);
std::cout<< "X" <<(GLfloat) poss[0] << " Y"<<poss[1] << " Z"<<poss[2] <<  std::endl;

   for( size_t i = 0; i < message.size(); ++i ) {
    glutBitmapCharacter(GLUT_BITMAP_HELVETICA_18, message[i]);
    }
glPopMatrix();

私のテキストは表示されません。実際、結果として得られる X、Y、および Z (Z が必要かどうかもわかりません..とにかく 0 にする必要があります) はすべて inf (無限大) です。独自の glRasterPos を設定しなければ、画面を離れる以外は問題なく動作します。私の戻り位置は、予想どおり、アップカウント X および 0 、 0 です。

それで、これについての取り決めは何ですか、私は正確に何を間違っていますか?

4

1 に答える 1

0

壮大なセグメンテーション エラーを生成しました: glGetFloatv(GL_CURRENT_RASTER_POSITION, poss) は 4 つの値を返すため、次を使用する必要があります。

float poss[4];

これとは別に、あなたのコードは私のマシンで正常に動作し、以下を返します:

X0 Y0 Z0.5

したがって、ここに投稿したコードには問題がないようです。基本的な「HelloWorld」-GL プログラムにコピーして、そこで動作するかどうかを確認してください。一部の OpenGL コマンドは、有効な描画面が初期化された後にのみ機能することに注意してください。

于 2013-02-12T20:20:51.390 に答える