Теперь, независимо от порядка (если сначала я рисую линии или сначала квадраты) и независимо от положения, всегда случается, что линии рисуются над кубом.
ЕСЛИ ваши строки имеют правильную глубину, то вы забыли включить буфер глубины. Если вы включили буфер глубины, то вы должны убедиться, что ваша библиотека используется для инициализации запрошенного буфера глубины OpenGL.
Я думал, что OpenGL рисует спереди назад.
Это не так. OpenGL рисует полигоны в том же порядке, в котором вы их указали. Там нет автоматической сортировки любого рода.
У кого-нибудь есть подсказка, чтобы преодолеть эту проблему?
Ну, вы могли бы очистить буфер глубины, но это будет медленно и неэффективно. Технически, вы почти никогда не должны этого делать.
glDepthMask(GL_FALSE)
отключит запись в буфер глубины. то есть любой объект, нарисованный после этого вызова, не будет обновлять буфер глубины, но будет использовать данные, которые уже сохранены. Он часто используется для систем частиц. Назовите glDepthMask(GL_FALSE)
, нарисуйте «линии», назовите glDepthMask(GL_TRUE)
, затем нарисуйте куб.
Если вы объедините glDepthMask(GL_FALSE)
с glDepthFunc(GL_ALWAYS)
, тогда объект всегда будет отрисован, полностью игнорируя буфер глубины (но буфер глубины не будет изменен).