1

スタック オーバーフローのおかげで、私が抱えていた多くの問題を解決することに非常に近づいています。今週末にもう1つ手に入れました。

基本的にいくつかのテクスチャを持つ正方形である GameObject2D というオブジェクトがあります。このオブジェクトを 3D で投影すると、すべてが機能します。これを行うには、prepare3Ddrawing というメソッドを使用します。次に、2D 描画を行いたいので、2D 描画用の射影行列を準備するメソッドを使用しています。prepare2Ddrawing の 2 つの異なるバージョンを試しましたが、うまく動作させることができません。まず、ここに私の3D準備があります...

private void prepare3Ddrawing(GL10 gl)
    {   
        gl.glLoadIdentity();
        gl.glViewport(0, 0, getWidth(), getHeight());
        gl.glDisable(GL10.GL_DITHER);
        gl.glEnable(GL10.GL_DEPTH_TEST);
        gl.glMatrixMode(GL10.GL_PROJECTION);
        gl.glLoadIdentity();
        GLU.gluPerspective(gl, 45.0f, (float)getWidth()/(float)getHeight(),0.1f,100.0f);    
    }

そして、これが原点を左上ではなく左下に置く私の2Dのバージョンです...

private void prepare2Ddrawing(GL10 gl)
    {   
        gl.glDisable(GL10.GL_DEPTH_TEST);
        gl.glLoadIdentity();
        gl.glMatrixMode(GL10.GL_PROJECTION);
        gl.glLoadIdentity();
        GLU.gluOrtho2D(gl,0,getWidth(), 0, getHeight());
        gl.glMatrixMode(GL10.GL_MODELVIEW);
        gl.glLoadIdentity();
    }

正しい結果を得るには、 GLU.gluOrtho2D(gl...) の正しい組み合わせが必要だと思います。何か案は?ありがとう!

4

1 に答える 1

1

GLU.gluOrtho2D(gl,0,getWidth(), 0, getHeight()) には、パラメーター left、right、bottom、top があります。「スクリーンのような」座標が必要な場合は、上を「0.0」に、下を「getHeight()」に設定する必要があります。この方法は、基本的に座標系をセットアップするために使用されます。たとえば、グラフを描画する必要がある場合、(0,0) を中央に、(-1,0) の場合は左に、上を (0,1) にすると、パラメータは (-1, 1,- 1, 1) しかし、最も一般的な画面座標系のようなものが必要な場合は、左上隅に (0,0) を、右下隅に (幅, 高さ) を (0, 幅, 高さ, 0) にします。 . または、簡単にするために、ビューの左上と右下に必要な座標を挿入するだけです。

于 2012-11-26T07:06:17.043 に答える