2016-06-15 4 views
1

Я работаю над небольшим GIS-приложением, используя OSG, но я довольно новичок с ним.Управление буфером глубины и порядок рисования в OpenSceneGraph

Поскольку вид не меняется много, я не пытаюсь сохранить достойный коэффициент fps.

Мне нужно нарисовать несколько слоев на одном и том же экране. Слои могут перекрываться, но не всегда.

Прямо сейчас, чтобы быть в состоянии выбрать, какой слой находится поверх других, я использую свойства PolygonOffet, но мне это не нравится.

Вот что я хочу попробовать: -Положите ясный узел на моем корне, чтобы очистить все буфера -Положите ясном узел на вершине каждого узла слоя, чтобы очистить только буфер глубины -find способа заставить OSG нарисовать этот слой в определенном порядке

Так что мой вопрос: - Возможно ли это? - Как выбрать порядок рендеринга узла моего слоя?

ответ

1

Вы можете очистить буферы с помощью камер. Например. если ваша основная камера рисует все, и вы хотите очистить только один буфер, вы можете добавить вторую камеру, которая не делает ничего, кроме того, что имеет ту же самую функцию renderTargetImplementation, прикрепите к ней DepthBuffer, имея прозрачную маску GL_DEPTH_BUFFER_BIT, и пусть она будет отображаться после вашей основной камеры.

Для камер вы можете выбрать порядок рендеринга через setRenderOrder и для узлов, с которыми вы можете работать с setRenderBin.

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

На стороне, вы хотите избежать z-боев и есть несколько методов для этого. Возможно, с этим ключевым словом вы можете найти ответ.