Android上的OpenGL ES 2.0中的frustumM / setLookAtM

时间:2012-02-28 21:33:09

标签: android opengl-es-2.0 frustum

我正在使用OpenGL ES 2.0教程作为基础在Android平台上玩OpenGL。有问题的代码是:

public void onSurfaceChanged( GL10 unused, int width, int height )
{   GLES20.glViewport( 0, 0, width, height );

    float ratio = (float) width / height;
    Matrix.frustumM( mProjMatrix, 0, -ratio, ratio, -1, 1, 1,  9.9999f );

    Matrix.setLookAtM( mVMatrix, 0, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f,  0.0f, 0.0f, 1.0f,  0.0f );

    muMVPMatrixHandle = GLES20.glGetUniformLocation( mProgram, "uMVPMatrix" );
}

特别是对于frustumM的“远”参数。只要该参数为10,就不会出现图像(三角形)。任何其他值都可以。为什么呢?

我做了一些阅读 - 一切都无济于事。甚至我的朋友(又名谷歌)也无法帮助我。

提前致谢。

1 个答案:

答案 0 :(得分:1)

计算投影矩阵时,指定远平面为9.9999f, 这就是为什么视图矩阵计算中eyeZ值为10或更大将导致空图像的原因。你正在寻找你的视锥体。

请看一下这篇文章:http://www.lighthouse3d.com/tutorials/view-frustum-culling/