设置世界协调和相机矩阵OpenGL ES 2.0

时间:2013-01-28 02:50:53

标签: android opengl-es matrix opengl-es-2.0 coordinate-systems

最近我一直在尝试使用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。

1 个答案:

答案 0 :(得分: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);
}

然后将您的模型视图矩阵与此正交投影矩阵相乘。