Буфер глубины OpenGL не применяется

Я новичок в рендеринге openGL, и независимо от того, что я делаю, глубина глубины не будет работать. очевидно, я уже включил тест глубины (glEnable(GL_DEPTH_TEST);) и очищаю буфер каждый кадр.

Но openGL продолжает показывать последние объекты, отображаемые перед другими...

Вы можете увидеть мой код на моем github. Это два файла: Основной цикл. Мой основной цикл находится на src/tk/azertyfun/fps/Fps.java, а рендеринг — на src/tk/azertyfun/fps/objects/Mesh.java.

Я использую Java и lwjgl.


person Azertyfun    schedule 25.02.2014    source источник
comment
Было бы полезно, если бы вы могли создать минимальный тестовый пример. В любом случае минимальный размер буфера глубины по умолчанию равен 8 битам; возможно, он работает, но разрешение слишком низкое (эффективное разрешение будет зависеть от расстояния между передней и задней плоскостями отсечения, а также от того, насколько далеко вы находитесь от камеры [значения буфера глубины логарифмические] ). Попробуйте инициализировать Display с помощью PixelFormat, для которого требуется как минимум 12- или 16-битный буфер глубины. Это помогает?   -  person Jason C    schedule 25.02.2014


Ответы (1)


Как вы говорите, вы правильно включаете тестирование глубины до того, как ваш цикл рендеринга начнется с:

glEnable(GL_DEPTH_TEST);

... и корректно очищать буфер в начале каждого кадра:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

Первое, что вы затем рисуете в каждом кадре с помощью метода render(), это:

skybox.draw();

Если вы посмотрите на реализацию метода draw() в Skybox, вы увидите, что у вас есть:

glDisable(GL_DEPTH_TEST);

Таким образом, он отключается до того, как вы на самом деле что-либо рисуете, и больше никогда не включается.

person NigelK    schedule 25.02.2014