1

私は非常に単純なゲームに取り組んでおり、いくつかの基本的なテクスチャを含めることにしました。私はコードを試していましたが、何らかの理由で、テクスチャを正しくマッピングできない理由がわかりません。今、私は単純に緑色の長方形 (512 x 64 .png ファイル) をサイズ 640 x 480 の画面の下部にマップしようとしています。この緑色の長方形は地面を表しているはずです。これが私の失敗した試みの画像です: 失敗

関連するコードは次のとおりです。

作成した Boot クラスで、この関数を呼び出します。

    public void initGL() {
        GL11.glMatrixMode(GL11.GL_PROJECTION);
        GL11.glLoadIdentity();
        GL11.glOrtho(0, gameWidth, gameHeight, 0, 1, -1);
        GL11.glMatrixMode(GL11.GL_MODELVIEW);
        GL11.glEnable(GL11.GL_TEXTURE_2D);
    }

作成したグラウンド クラスで、draw 関数を呼び出します。テクスチャは Boot クラスにロードされ、バインドして Ground.draw() 関数で使用する保護された変数として設定されます。

    public void draw() {
        this.texture.bind();
        GL11.glLoadIdentity();
        GL11.glTranslatef(0, 0, 0);
        GL11.glBegin(GL11.GL_QUADS);
            GL11.glTexCoord2f(0, 0);
            GL11.glVertex2f(0, 480 - height);
            GL11.glTexCoord2f(1, 0);
            GL11.glVertex2f(640, 480 - height);
            GL11.glTexCoord2f(1, 1);
            GL11.glVertex2f(640, 480);
            GL11.glTexCoord2f(0, 1);
            GL11.glVertex2f(0, 480);
        GL11.glEnd();
   }   

また、上記に注意していただければ、GL11.glTranslatef 呼び出しがあります。この関数の 2 番目の引数を y 方向にさらに移動するのに十分な大きさにするだけで、地面のテクスチャを正しい位置に配置できますが、この方法ではやりたくありません。そもそもテクスチャがどのようにしてこの場所に配置されたのかはよくわかりません。その理由を突き止めたいと思います。

4

1 に答える 1

1

あなたの行列に問題があると思います:

    GL11.glMatrixMode(GL11.GL_PROJECTION);
    GL11.glLoadIdentity();
    GL11.glOrtho(0, gameWidth, gameHeight, 0, 1, -1);

私はOpenGL固定パイプラインを実際に使用したことはありませんが、私が見たり実際に見たりしないのは、行列を乗算する場所です。クワッドのモデル行列をglOrtho()である投影行列で乗算する必要があります。 ( glPushMatrix/glPopMatrix )

したがって、シナリオでは次のことを行う必要があります。

Push Ortho matrix.
   Push camera(view) matrix (if exists).
        Push Model Matrix.

        Pop  Model Matrix.
   Pop camera (view) matrix (if exists).
Pop Ortho matrix.

Ortho が変更されない場合は、一度だけプッシュする必要があると思います。glOrtho() の設定によっては、世界の中心が画面の中心とは異なるため、オルソ座標の変更も考慮してください。通常は左上隅または左下隅です。

肝心なのは、古い非推奨の OpenGL を使用することはまったくお勧めしませんが、多数のオンラインチュートリアルで正しい方法で変換が行われる方法を確認する必要があります。

于 2013-03-13T10:57:01.340 に答える