0

私は OpenGL が初めてなので、テクスチャ付きの 2D 四角形を描画しようとしました。理由はわかりませんが、これはうまくいきませんでした:

    GL11.glMatrixMode(GL11.GL_PROJECTION);
    GL11.glLoadIdentity();
    GL11.glViewport(0, 0, frameWidth, frameHeight);
    GL11.glOrtho(0, 640, 0, 480, 0, 128);
    GL11.glEnable(GL11.GL_TEXTURE_2D);
    GL11.glBindTexture(GL11.GL_TEXTURE_2D, renderer.getTexture("/textures/menu/title.png"));
    GL11.glEnable(GL11.GL_ALPHA_TEST);
    GL11.glAlphaFunc(GL11.GL_GREATER, 0.1F);
    GL11.glBegin(GL11.GL_QUADS);
    GL11.glTexCoord2f(0, 0);
    GL11.glVertex3f(-frameWidth/2, -frameHeight/2, -1);
    GL11.glTexCoord2f(1, 0);
    GL11.glVertex3f(+frameWidth/2, -frameHeight/2, -1);
    GL11.glTexCoord2f(1, 1);
    GL11.glVertex3f(+frameWidth/2, +frameHeight/2, -1);
    GL11.glTexCoord2f(0, 1);
    GL11.glVertex3f(-frameWidth/2, +frameWidth/2, -1);
    GL11.glEnd();
    GL11.glEnable(GL11.GL_CULL_FACE);
    GL11.glCullFace(GL11.GL_BACK);

frameWidth はウィンドウの幅、frameHeight は高さです。

4

2 に答える 2

3

実際に何が悪かったのかを書いていないので、推測することしかできませんが、ここでは、z の範囲 (0,128) で正射影を指定しました。

 GL11.glOrtho(0, 640, 0, 480, 0, 128);

そして頂点を z = -1 にします。すべての頂点がクリッピングされるため、確かに描画されません。

 GL11.glVertex3f(-frameWidth/2, -frameHeight/2, -1);

(またはハードコードされた同等のもの) に変更し、すべての頂点を に変更glOrthoしてみてください。gluOrtho2DglVertex2f

于 2012-08-20T12:28:28.633 に答える
0

glEnable(GL_CULL_FACE); glCullFace(GL_BACK)レンダリングの前に呼び出す必要があります。glOrtho2D に使用している場合はglOrtho(..., ..., ..., ..., -1, 1);、2D 頂点に glVertex2f を実行して使用する必要があります。

于 2012-08-20T12:23:22.073 に答える