Почему для функции глубины GL рекомендуется использовать GL_LEQUAL (и почему она у меня не работает)?

На GL wiki они рекомендуют использовать GL_LEQUAL для функции глубины. Также для функции глубины по умолчанию используется GL_LESS. Когда я использую одну из этих функций, я получаю странные результаты. На этом рисунке красный квадрат должен быть перед синим (оба квадрата одинакового размера): with GL_LESS

Однако, если я использую glClearDepth(0.0), а затем glDepthFunc(GL_GREATER), то, выполняя в остальном неизменную программу, я получаю следующее: with GL_GREATER

Подумав об этом немного больше, становится понятно, что GL_LESS даст такие результаты: если входящее значение глубины меньше сохраненного, фрагмент будет записан.

Если я расположил камеру на (1, 0, 0) и смотрю в направлении (0, 0, 0), я ожидаю, что объект на (0.5, 0, 0) будет находиться перед объектом на (0, 0, 0). При использовании GL_LESS не будет ли объект на (0, 0, 0) тем, чьи фрагменты записаны?

EDIT: Nicol, спасибо за упоминание о матрице проекции. Похоже, что она была установлена неправильно. Я некоторое время следовал вашему руководству на arcsynthesis.org и адаптировал код к своему собственному проекту, но я отклонился от вашей матрицы проекции и использовал математику, описанную на странице руководства glFrustum, чтобы реализовать свою собственную версию этой функции, а затем использовал замену gluPerspective от NeHe, чтобы заменить gluPerspective. Я не знаю, почему замены не сработали, потому что математика моей матрицы верна (я проверил ее на различных онлайн-калькуляторах). Используя вашу матрицу, я получаю правильный результат с GL_LESS.

5
задан user1175938 29 January 2012 в 23:53
поделиться