首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果距离超过某个值,如何使osgEarth::ModelLayer的模型隐藏?

如果距离超过某个值,如何使osgEarth::ModelLayer的模型隐藏?
EN

Stack Overflow用户
提问于 2018-03-23 19:17:58
回答 1查看 240关注 0票数 0

我正在尝试显示模型文件中的标签,osgearth_features演示展示了如何做到这一点。它对我来说很好,但是一旦到地球的距离超过了某个值,我就需要标签消失。(我使用的是osgEarth的25ce0e1版本。)

我知道有PagedLOD,它可以帮助我隐藏一个osg::Node。但我拥有的是osgEarth::ModelLayer,而我似乎找不到一种合理的方法来在MapNode和我的标签Node之间插入PagedLOD

我目前的方法,虽然是可行的,但有点老生常谈。这是对原始osgearth的osgearth_features.cpp的实验性更改,以实现我需要的功能:

代码语言:javascript
复制
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 )

节点的这种替换对我来说太难看了。什么是更好的,“正确”的方式来实现我的目标?或者这就是这些事情应该做的方式?

EN

回答 1

Stack Overflow用户

发布于 2018-03-24 02:40:10

也许您可以编写一个带有自定义文件扩展名的伪加载器,用于包装您的真实模型文件名(如mymodel.obj.plod),然后“加载”并返回,以便将一个PagedLOD加载到图中,并在PageLOD子属性中包含“真实”模型路径名。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49448476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档