frustumM / setLookAtM в OpenGL ES 2.0 на Android - PullRequest
1 голос
/ 29 февраля 2012

Я играю с OpenGL на платформе Android, используя в качестве основы учебное пособие по OpenGL ES 2.0.Код, о котором идет речь:

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" );
}

В частности, параметр "far" для frustumM.Когда этот параметр равен 10, изображение (треугольник) не появляется.Любое другое значение в порядке.Почему?

Я немного прочитал - все безрезультатно.Даже мой друг (он же Google) не смог мне помочь.

Заранее спасибо.

1 Ответ

1 голос
/ 01 марта 2012

Когда вы вычисляете матрицу проекции, вы указываете дальнюю плоскость равной 9.9999f, поэтому значение eyeZ, равное 10 или больше, при вычислении матрицы вида приведет к пустому изображению.Вы смотрите за пределы своего усеченного конуса.

Пожалуйста, посмотрите на эту статью: http://www.lighthouse3d.com/tutorials/view-frustum-culling/

...