-3

独自のシンプルなゲーム UI を作成したいのですが、主な操作方法はわかっていると思います。問題は、3D ビューで画面座標を使用して単純な 2D クワッドを描画する方法がわからないことです。それは可能ですか?ゲームの UI を別の方法で描画する必要があるのでしょうか。

ライブラリを推奨しないでください。既存のものを使用するのではなく、それがどのように行われるかを学びたいです。

4

2 に答える 2

2

lwjglタグを含めたので、これは一般的にOpenGLで通常行われる方法であり、これも問題なく機能するはずです。

  1. 基になるゲームシーンを通常どおりにレンダリングします
  2. シーンの上にレンダリングできる正投影ビューが得られるようにビューを設定します。-1.0f、-1.0f(画面の左、上)から1.0f、1.0f(画面の下、右)の範囲の単位があり、下にあるレンダリング済みのゲームシーンの上部に描画されます。

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(-1, 1, -1, 1, -1, 1);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glDisable(GL_DEPTH_TEST);
    
  3. 座標が-1.0fから1.0fのテクスチャクワッドをレンダリングします

    glBegin(GL_QUADS);
    // <== Bind your texture, material for your GUI button here
    glVertex3f(-0.5, 0.5, 0);
    glVertex3f(0.5, 0.5, 0);
    glVertex3f(0.5, -0.5, 0);
    glVertex3f(-0.5, -0.5, 0);
    glEnd();
    

これにより、解像度の独立性が得られます。したがって、800x600でゲームをプレイする場合、クワッドは1つのサイズになりますが、1024x768でプレイすると、画面の同じ比例領域を満たすように自動的に拡大します。

本当に画面座標で直接書き込みたい場合は、代わりにその方法でglOrthoを設定できます(たとえば、0.0から800.0の範囲)。しかし、それはお勧めできません。

于 2012-05-17T21:01:52.167 に答える
1

GLU.gluOrtho2D(0f, glutScreenWidth, 0f, glutScreenHeight); を使用して投影を直交に設定します。

これは、JBullet がテキスト描画用のプロジェクションをセットアップする方法です (FontRenderer の z 座標として 1 を使用します)。

// See http://www.lighthouse3d.com/opengl/glut/index.php?bmpfontortho
public void setOrthographicProjection() {
  // switch to projection mode
  gl.glMatrixMode(GL_PROJECTION);

  // save previous matrix which contains the 
  // settings for the perspective projection
  gl.glPushMatrix();
  // reset matrix
  gl.glLoadIdentity();
  // set a 2D orthographic projection
  gl.gluOrtho2D(0f, glutScreenWidth, 0f, glutScreenHeight);
  gl.glMatrixMode(GL_MODELVIEW);
  gl.glLoadIdentity();

  // invert the y axis, down is positive
  gl.glScalef(1f, -1f, 1f);
  // mover the origin from the bottom left corner
  // to the upper left corner
  gl.glTranslatef(0f, -glutScreenHeight, 0f);
}

https://github.com/affogato/JBullet-QIntBio-Fork/blob/master/src/com/bulletphysics/demos/opengl/を参照して、FontRenderer クラスと LwjglGL クラスを見てください...

于 2012-05-17T20:58:49.500 に答える