Как скрыть модель osgEarth::ModelLayer, если расстояние превышает некоторое значение?

Я пытаюсь отобразить метки из файла модели, и osgearth_features Демо показывает, как это сделать. Это прекрасно работает для меня, но мне нужно, чтобы метки исчезли, как только расстояние до Земли превысит некоторое значение. (Я использую версию 25ce0e1 от osgEarth.)

Я знаю что есть PagedLOD, который помог бы мне с сокрытием osg::Node, Но то, что у меня есть, osgEarth::ModelLayer и я не могу найти разумный способ вставить PagedLOD между MapNode и мои ярлыки Node,

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

diff --git a/src/applications/osgearth_features/osgearth_features.cpp b/src/applications/osgearth_features/osgearth_features.cpp
index 2bb1ed8..fbdd3da 100644
--- a/src/applications/osgearth_features/osgearth_features.cpp
+++ b/src/applications/osgearth_features/osgearth_features.cpp
@@ -184,6 +184,12 @@ int main(int argc, char** argv)
         geomOptions.styles()->addStyle( labelStyle );

         map->addModelLayer( new ModelLayer("labels", geomOptions) );
+        osg::Group*const modelLayerGroup=mapNode->getModelLayerGroup();
+        const int newNumChildren=modelLayerGroup->getNumChildren();
+        osg::Node*const model=modelLayerGroup->getChild(newNumChildren-1);
+        osg::PagedLOD*const lod=new osg::PagedLOD;
+        modelLayerGroup->replaceChild(model,lod);
+        lod->addChild(model, 0, 1e7);
     }

     if ( !useStencil )

Эта замена узлов кажется мне слишком уродливой. Какой лучший, "правильный" способ достижения моей цели? Или так должно быть сделано?

1 ответ

Возможно, вы могли бы написать псевдо-загрузчик с пользовательским расширением файла, которое вы используете для переноса имен файлов вашей реальной модели (например, mymodel.obj.plod), который затем "загружает" и перезапускает osgEarth PagedLOD в граф с "реальным" путь модели в дочерних атрибутах PageLOD.

Другие вопросы по тегам