0

私は現在、2D/3D グラフの作成に使用している JOGL ライブラリ (openGL の Java ラッパー) を使用して、opengl を調査しています。現時点では、「glutBitmapString」メソッドを使用してレンダリングしたテキストに少し問題があります。下のスクリーンショットに示すように、ウィンドウに関してサイズ変更されていません。残念ながら、私に与えられた仕事の仕様は、これは Java で行う必要があるということでした。そのため、より適切にサポートされているバージョンの openGL を持つ他の言語にジャンプすることはできません。

ウィンドウ内の他のすべてのサイズは正しく変更されるため、問題は以下に投稿したコードにあると想定しています。そうでない場合は、問題に関連していると思われるコードを投稿させていただきます.

デフォルトのウィンドウ サイズ

サイズ変更されたウィンドウ

これは、テキストをレンダリングするために使用しているコードのスニペットです

GL gl = drawable.getGL();
    GLUT glut = new GLUT();

    float textPosx = -0.4f;
    float textPosy = -2.1f;

    gl.glColor3f(1.0f, 0.0f, 0.0f);

    // Move to rastering position
    gl.glRasterPos2f(textPosx, textPosy);

    // convert text to bitmap and tell what string to put
    glut.glutBitmapString(GLUT.BITMAP_HELVETICA_12, "0");

    textPosx = 1.75f;
    textPosy = -2.15f;

    // Move to rastering position
    gl.glRasterPos2f(textPosx, textPosy);

    // convert text to bitmap and tell what string to put
    glut.glutBitmapString(GLUT.BITMAP_HELVETICA_18, "TIME");

    textPosx = -1.0f;
    textPosy = 1.0f;

    gl.glColor3f(0.0f, 1.0f, 0.0f);

    // Move to rastering position
    gl.glRasterPos2f(textPosx, textPosy);

    // convert text to bitmap and tell what string to put
    glut.glutBitmapString(GLUT.BITMAP_HELVETICA_18, "ERRORS");
4

2 に答える 2

3

glutBitmapString はテキストを 2D で描画します。2D テキストのサイズは、フォント サイズに基づきます。したがって、この例のようにフォント サイズを 18 に設定すると、ウィンドウをどれだけ大きくしたりズームインしたりしても、画面上の標準の 18 pt フォント サイズになります。ジャバの問題。Java は実際には何も描画していません。すべてが C++ で記述された OpenGL ネイティブ ライブラリによって描画されるため、C++ でも Java とまったく同じになります。

これを回避するには 2 つの方法があります。1 つは、ズームインまたはズームアウトするときにテキストのフォント サイズを変更することです。これはやや厄介で、正しく行うのが難しい場合があります。より良いオプションは、単純に 3D テキストを使用することです。JOGL では、TextRenderer オブジェクトを使用して 3D テキストを描画します。

init メソッドで、次のようにグローバル変数を作成します。

textr = new TextRenderer(new Font("SansSerif", Font.PLAIN, 18));

明らかに、フォント設定を好みのものに変更します。次に、表示ループで:

textr.setColor(Color.GREEN);
textr.begin3DRendering();
textr.draw3D("ERRORS", xLocation, yLocation, zLocation, scale);
textr.end3DRendering();

個人的には、大きなフォント サイズを使用してから、それを少し縮小することを好みます。そうすれば、ズームインしてもピクセル化されません。

また、2D テキストとは異なり、3D テキストは常に画面に面しているわけではありません。手動で行う必要があります。カメラの設定方法によって異なりますが、基本的な回転を使用してカメラを動かしている場合は、通常、3D テキスト オブジェクトの回転を無効にして、カメラに向けることができます。

x、y、z の位置は、現在のオブジェクト内の位置 (ローカル座標) です。beginRendering() から endRendering() までを、独自のローカル座標系を持つ 1 つのオブジェクトと考えてください。通常、テキストをローカル座標 0, 0, 0 に描画してから、オブジェクト全体を適切な場所に移動します。そうすることで、回転が理解しやすくなります。

于 2012-08-24T18:14:44.310 に答える
0

TextRenderer を使用してみてください。正常に動作します。

于 2013-01-03T17:20:02.397 に答える