0

最近我一直在尝试 OpenGL ES 2.0 并在线查看了一些教程,但有一件事让我感到困惑。因此,如果我理解正确,(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

我只会将 setLookAtM 用于 3d 场景。您需要构建一个正交矩阵并开始使用它。有几个关于 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 回答