Я рендерил два треугольника: один - красный меньший треугольник с отрицательным значением глубины (координата z вершины), другой - больший треугольник с положительным значением глубины.
float smallVertices[] = {
//position color
-0.5f, -0.5f, -0.5f, 1.0f, 0.0f, 0.0, 1.0f,// left
0.5f, -0.5f, -0.5f, 1.0f, 0.0f, 0.0, 1.0f,// right
0.0f, 0.5f, -0.5f, 1.0f, 0.0f, 0.0, 1.0f// top
};
float bigVertices[] = {
//position color
-1.0f, -1.0f, 0.5f, 0.0f, 0.0f, 1.0, 1.0f,// left
1.0f, -1.0f, 0.5f, 0.0f, 0.0f, 1.0, 1.0f,// right
0.0f, 1.0f, 0.5f, 0.0f, 0.0f, 1.0, 1.0f// top
};
// test1
Перед рендерингом треугольников я включаю тест глубины, затем рисую меньший треугольник и, наконец, рисую больший треугольник. Полученный результат - то, чего я ожидал.
// test2
Перед рендерингом треугольников я отключаю тест глубины, но включаю обновление буфера глубины (glDepthMask(GL_TRUE)
). Затем я сначала рисую меньший треугольник, затем включаю тест глубины и устанавливаю функцию сравнения глубины на GL_LESS
, наконец нарисую больший треугольник.
Я ожидал, что внутри синего большего треугольника будет красный меньший треугольник. Тем не менее, результат рендеринга - просто синий большой треугольник.
Я установил glDepthMask(GL_TRUE)
, чтобы значение буфера глубины обновлялось до значения глубины меньшего треугольника. Затем, используя большее значение глубины треугольника по сравнению со значением буфера глубины. Таким образом, я думал, что вижу красный меньший треугольник внутри синего большего треугольника.
// render
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glUseProgram(shaderProgram);
glDisable(GL_DEPTH_TEST);
glDepthMask(GL_TRUE);
// draw our first triangle with negative depth value
glBindVertexArray(smallTriangleVAO);
glDrawArrays(GL_TRIANGLES, 0, 3);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
// draw the other triangle with positive depth value
glBindVertexArray(bigTriangleVAO);
glDrawArrays(GL_TRIANGLES, 0, 3);
Что-то не так с моими кодами?