十一 :
異なる形状のレンダリング順序(頂点アレイ)を処理する方法はありますか?
緑の飛行機は、青のものの前にする必要があります:
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)
}
Rabbid76:
あなたは有効にする必要がデプステスト:
GLES30.glEnable(GLES30.GL_DEPTH_TEST)
デプステストが有効になっている場合は、深度バッファもクリアする必要があります。
GLES30.glClear(GLES30.GL_COLOR_BUFFER_BIT | GLES30.GL_DEPTH_BUFFER_BIT)
断片の深さは、深さバッファに格納されている深さに対してテストされていることをデプステスト原因。テストが失敗した場合、フラグメントは破棄され、目標バッファのまま変更されません。
デフォルトでは、深さテスト機能がありますGL_LESS
。それが近い、すべてのカメラと同じ位置に前に書き込まれたフラグメントにある場合にフラグメントが試験に合格することを引き起こすこと。デプスバッファは、フレームの開始でクリアする必要があることのため。