Порядок рендеринга фигур - PullRequest
       115

Порядок рендеринга фигур

3 голосов
/ 22 февраля 2020

Есть ли способ обработать порядок рендеринга различных фигур (массивов вершин)?

Зеленая плоскость должна быть перед синей:

enter image description here

override fun onDrawFrame(unused: GL10) {
    GLES30.glClear(GLES30.GL_COLOR_BUFFER_BIT)

    Matrix.setLookAtM(
            view,
            0,
            eyeValue.x, eyeValue.y, eyeValue.z,
            0f, 0f, 0f,
            0f, 1.0f, 0.0f
    )

    Matrix.multiplyMM(mvp, 0, projection, 0, view, 0)

    shapes.forEach {
        it.onDraw(mvp)
    }
}


open fun onDraw(mvp: FloatArray) {
    program.onDrawStart()
    program.setV4(uNames.uColor, arrayColor)
    program.setV4Matrix(uNames.uMvp, mvp)
    program.drawVertexes(vertexes.buffer)
}

1 Ответ

2 голосов
/ 23 февраля 2020

Необходимо включить Проверка глубины :

GLES30.glEnable(GLES30.GL_DEPTH_TEST)

Когда проверка глубины включена, буфер глубины также должен быть очищен:

GLES30.glClear(GLES30.GL_COLOR_BUFFER_BIT | GLES30.GL_DEPTH_BUFFER_BIT)

Проверка глубины приводит к тому, что глубина фрагмента проверяется по глубине, которая хранится в буфере глубины. Если проверка не пройдена, фрагмент отбрасывается, а целевой буфер остается неизменным.
По умолчанию функция проверки глубины равна GL_LESS. Это приводит к тому, что фрагмент проходит проверку, если он ближе к камере, чем все фрагменты, которые были записаны ранее в одной и той же позиции. Из-за этого буфер глубины должен быть очищен в начале кадра.

...