Я не использовал glPolygonOffset
, но я просто прочитал об этом в официальном FAQ - обязательно к прочтению, если вы еще этого не видели. Существует также справочная страница .
Согласно этой ссылке, смещение вычисляется после нормальных расчетов Z, но применяется до теста глубины и перед записью в буфер глубины.
Я могу вспомнить две проблемы. Во-первых, FAQ рекомендует использовать glPolygonOffset(1,1)
, а не (0,1)
. Первый «факторный» аргумент умножается на наклон многоугольника и добавляется к смещению. Это, по-видимому, важно для "ребристых" полигонов. Если многоугольник направлен на камеру, это не имеет значения, но если он находится под углом, величина, которую вам нужно продвинуть вперед, увеличивается с углом.
Во-вторых, вы разрешаете смещение только для одного из полигонов? Если вы включили его для обоих (или забыли отключить), то он будет применяться к обоим полигонам и иметь чистый эффект, равный нулю.
В-третьих, я подозревал, что ваш буфер глубины слишком велик (учитывая, что буферы глубины имеют гиперболический масштаб, который благоприятствует объектам, расположенным близко к камере). Я не уверен в этом, учитывая, что glPolygonOffset
должен работать со значениями глубины, а не со значениями Z (поэтому масштаб буфера глубины не должен быть здесь фактором). Возможно, вы захотите попробовать его с более коротким буфером глубины (возможно, 1000) и посмотреть, имеет ли это значение.