形状的渲染顺序
Rendering order of shapes
有没有办法处理不同形状(顶点数组)的渲染顺序?
绿色平面应该在蓝色平面之前:
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)
}
您必须启用 Depth Test:
GLES30.glEnable(GLES30.GL_DEPTH_TEST)
启用深度测试后,深度缓冲区也必须被清除:
GLES30.glClear(GLES30.GL_COLOR_BUFFER_BIT | GLES30.GL_DEPTH_BUFFER_BIT)
深度测试是根据存储在深度缓冲区中的深度来测试片段的深度。如果测试失败,片段将被丢弃,目标缓冲区保持不变。
默认深度测试函数是GL_LESS
。如果一个片段比之前在同一位置写入的所有片段更靠近相机,这会导致片段通过测试。因此,必须在帧开始时清除深度缓冲区。
有没有办法处理不同形状(顶点数组)的渲染顺序?
绿色平面应该在蓝色平面之前:
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)
}
您必须启用 Depth Test:
GLES30.glEnable(GLES30.GL_DEPTH_TEST)
启用深度测试后,深度缓冲区也必须被清除:
GLES30.glClear(GLES30.GL_COLOR_BUFFER_BIT | GLES30.GL_DEPTH_BUFFER_BIT)
深度测试是根据存储在深度缓冲区中的深度来测试片段的深度。如果测试失败,片段将被丢弃,目标缓冲区保持不变。
默认深度测试函数是GL_LESS
。如果一个片段比之前在同一位置写入的所有片段更靠近相机,这会导致片段通过测试。因此,必须在帧开始时清除深度缓冲区。