2

デバイスに関係なく、ビューが画面の上部が 1.0f で下部が -1.0f の単純な 2D フィールドになるようにレンダラーを設定しようとしています。私はそれを完全に理解できないようです.onSurfaceChanged()メソッドで以下のメソッドを使用し、gluPerspectiveのパラメータを操作して目的の効果を達成しましたが、完璧にすることは不可能のようです. 確かに、私が求めているものを達成するためにこれを行う別の方法があります。また、描画されたメッシュの Z 値をいじって、それらを一致させようとしました。

繰り返しますが、画面が-1.0fから1.0の範囲で定義されるように設定しようとしています.2.0fに等しい辺を持つ正方形を描いた場合、アスペクト比に関係なく画面全体を埋めます. これを行うには何を変更する必要がありますか? (メッシュ頂点の Z 寸法に使用する値を含めます)

(gluperspective() の奇妙なパラメーターに驚かないでください。何が起こるかを調べてみました。)

@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
        if(height == 0) {                       //Prevent A Divide By Zero By
            height = 1;                         //Making Height Equal One
        }

        gl.glViewport(0, 0, width, height);
        gl.glMatrixMode(GL10.GL_PROJECTION);
        gl.glLoadIdentity();
        GLU.gluPerspective(gl, 90.0f, (float) width / (float) height,
                    0.0000001f, 100.0f);
        gl.glMatrixMode(GL10.GL_MODELVIEW);
        gl.glLoadIdentity();
    }
4

2 に答える 2

2

代わりにオルソ行列を生成します。

Matrix.orthoM(projectionMatrix,0,-yourdisplayWidth/2,+yourdisplayWidth/2,-yourdisplayHeight/2,+yourdisplayHeight/2,0f,2f);

したがって、画像クワッドをカメラの前に1fの距離で配置できます。また、クワッドのサイズをピクセル単位と同じ大きさにする必要があります。このようにして、ピクセルパーフェクトをレンダリングできます。

参照:https ://github.com/Chrise55/Llama3D

于 2011-12-25T13:32:39.830 に答える
1

glPerspectiveの代わりにglOrthoまたはglFrustumを使用して実験してみることをお勧めします

于 2011-12-25T13:28:59.847 に答える