Я работаю над приложением дополненной реальности, и мне нужно отсортировать рендеринг трех разных видов геометрии.
Уровень 1
Фоновая геометрия. Это набор треугольников, которые представляют базовую архитектуру. Стены и т. Д.
Уровень 2
Фотография самолета. Фотография архитектуры, помещенная в виде текстуры на плоскости в космосе. Эта плоскость геометрически находится перед Уровнем 1 (как видно из виртуальной камеры).
Уровень 3
Динамическая геометрия. Это примитивы, такие как коробки и т. Д., Для увеличения сцены. Они геометрически отстают от Уровня 2, потому что они правильно размещены в системе координат Уровня 1.
Желаемый эффект:
a) Я хочу, чтобы Level_2 всегда рисовался перед Level_1. Это достигается автоматически, помещая плоскость изображения ближе к камере.
б) Я хочу, чтобы Level_3 был правильно закрыт от Level_1, тем самым скрывая части динамического блока, если он частично размещен за стеной Level_1. Это автоматически происходит и с обычным конвейером. Глубинное тестирование и т. Д.
c) Я хочу, чтобы все фрагменты / пиксели Уровня_3 были нарисованы ВЫШЕ Уровня_2, даже если они на самом деле находятся за ним. Эффект должен заставить объекты выглядеть так, как если бы они были закрыты частями фотографии.
Я знаю, что это возможно, потому что у меня есть приложение в X3Dom (которое отображает в webgl), которое может добиться этого эффекта с помощью атрибута «sortkey». Но я не мог воссоздать тот же эффект в чистом OpenGL. Я думал, что это должно быть простое использование уловок Stencilbuffer или Z-Buffer, но у меня это не работает. Как мне дать «всегда проходить» геометрии Level_3, чтобы она отображалась поверх всего остального, но также правильно закрывалась от Level_1? Или как заставить Level_2 скрывать только Level_1, а не Level_3, даже если он находится перед обоими?
В основном:
1) Level_2 скрывает Level_1
2) Level_1 и Level_3 перекрывают друг друга
3) Видимые части Level_3 (против Level_1) не закрываются Level_2
Любая помощь?
Спасибо!