最近我一直在尝试使用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。
答案 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);
}
然后将您的模型视图矩阵与此正交投影矩阵相乘。