Android OpenGL ES, фигура не отображается на устройстве, но нормально работает на эмуляторе? - PullRequest
2 голосов
/ 23 апреля 2020

Я следовал руководству от команды android, показывающему, как создать простой треугольник с использованием OpenGL. Вот ссылка на учебник. Все отлично работает как на android устройствах, так и на эмуляторе, пока я не доберусь до детали с применением проекции .

Как только я изменю строку vertexShaderCode на:

private val vertexShaderCode =
        "uniform mat4 uMVPMatrix;" +
        "attribute vec4 vPosition;" +
        "void main() {" +
        "  gl_Position = uMVPMatrix * vPosition;" +
        "}"

Треугольник не отображается на моих android устройствах, которые являются Huawei Y2 с Android 6.0 (API 23) и SONY с Android 4.4.4. Любая идея, почему это происходит, я подозреваю, что каким-то образом добавление вида камеры меняет положение треугольника где-то за пределами области просмотра. Как я могу это исправить?

1 Ответ

2 голосов
/ 24 апреля 2020

У меня были похожие проблемы с отображением на разных устройствах. Вы можете попробовать увеличить значение 'far' в методе frustumM ():

Matrix.frustumM(projectionMatrix, 0, left, right, bottom, top, near, far)

Увеличение значения этого параметра решило проблему для меня.

Как правило, для усеченного конуса вы можете использовать различные значения параметров для книжной и альбомной ориентации, например:

protected val aspect = widthScreen.toFloat() / heightScreen.toFloat()
...
private fun setPerspectiveProjection() {
    var left = -1.0f; var right = 1.0f
    var bottom = -1.0f; var top = 1.0f
    val near = 1.0f; val far = 145.0f
    if (widthScreen < heightScreen) { // portrait orientation 
        bottom /= aspect
        top /= aspect
    } else { // landscape orientation
        left *= aspect
        right *= aspect
    }
    Matrix.frustumM(projectionMatrix, 0, left, right, bottom, top, near, far)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...