0

最近、私は OpenGL ES 2.0 を試し、いくつかのチュートリアルをオンラインで見ましたが、1 つのことが混乱しました。したがって、正しく理解できれば、(0,0,0) はデバイスの中心であり、各方向に 1 ずつ移動して電話の端に到達できます。

さて、世界に自分の座標を設定することは可能ですか? たとえば、ワールドが 1024x640 程度で、カメラ マトリックスが 320x480 になるとします (静的、ゲーム内のさまざまなレベルでワールドを変更しても、カメラは同じままで、ビュー ポートは同じになります)レベルが大きいか小さいか)?

私は今、私が使用しているマトリックスのすべてと本当に混乱しています

setLookAtM (float[] rm, int rmOffset, float eyeX, float eyeY,
float eyeZ, float centerX, float centerY, float centerZ, 
float upX, float upY, float upZ);

カメラのビューを設定します。私はそれがどのように機能するかを理解しています。

しかし、世界を特定の座標系に設定するにはどうすればよいでしょうか? 「知っている」だけでなく、理解したい。

とりあえず2Dゲームにする予定なのでZ座標は全て0にします。

4

1 に答える 1

0

3D シーンには setLookAtM のみを使用します。直交行列を作成し、それを使用して作業を開始する必要があります。2D OpenGL ES 2.0 レンダリングのチュートリアルがいくつかあります。

たとえば、Android の場合は、次のようにするとよいでしょう: http://developer.android.com/training/graphics/opengl/index.html

編集:「世界」座標を歪みなしでカメラ空間に変換するオルソ投影マトリックスを設定およびオルソ投影する必要があります。

void buildOrthoProjectionMatrix(){
    int viewport_h = (int)_viewportHeight;
    int viewport_w = (int)_viewportWidth;

    // Calcuate view aspect factor to normalize everything to a 800x480 screen
    float view_factor_x = (float)viewport_w/(float)480;
    float view_factor_y = (float)viewport_h/(float)800;


    float [] ortho_matrix2 = {
            view_factor_x*2.f/viewport_w,           0.f,    0.f, 0.f,
            0.f, view_factor_y*2.f/viewport_h,      0.f,    0.f,
            0.f,                                    0.f,    1.f, 0.f,
            -1.f,                                   -1.f,   1.f, 1.f
    };

    this._orthoProjectionMatrix = new Matrix4(ortho_matrix2);
}

次に、モデルビュー マトリックスにこの正射影マトリックスを掛けます。

于 2013-01-28T14:55:33.947 に答える