#常见问题解答
##地球文件
#如何在地球文件中放置地图上的3D对象?
有两种方式。一种是使用 ModelLayer 如下所示:
``` XML<Model Name=“My Model Layer”>
<url>location_of_my_3d_model.osgb</url><location srs=“WGS84”lat=“34.0”long=“-80.4”/>
另一种方法是使用 Annotation 。批注必须位于 Annotations 图层。使用这种方法的一个好处是,您可以对符号系统进行建模,以设置模型的样式。此方法如下所示: ``` XML<批注>
- <模型>
<position srs=“WGS84”lat=“43”long=“-100”/><style>
model:“../data/red_flag.osg.45.scale”;model-scale:auto;
</style>
</型号>.
请参阅各种 feature 存储库中的地球文件,以获取更多信息和示例。
##接口说明
#如何使用接口在地图上放置3D模型?
这个 osgEarth::GeoTransform 类继承自 osg::Transform 并将为您将地图坐标转换为OSG世界坐标。将对象放置在地理空间位置,如下所示:
`c++
GeoTransform* xform = new GeoTransform();
GeoPoint point(srs, -121.0, 34.0, 1000.0);
xform->setPosition(point);
`
如果希望对象自动钳制到地形曲面,请指定地形并保留海拔高度:
`c++
GeoTransform* xform = new GeoTransform();
xform->setTerrain(mapNode->getTerrain());
GeoPoint point(srs, -121.0, 34.0);
xform->setPosition(point);
`
这个 srs 对象是这些示例中的 SpatialReference 坐标的位置。对于标准配置 WGS84 经度/纬度坐标,可以通过调用
`c++
auto srs = SpatialReference::get("wgs84");
`
#为什么我的机型没有纹理,也没有灯光?
osgearth场景图下的所有内容都使用着色程序进行渲染。因此,在使用自己的模型(或手动创建几何体)时,需要创建明暗器组件,以便它们能够正确渲染。
osgEarth具有用于此目的的内置着色器生成器。在节点上运行着色器生成器,如下所示:
`C++
osgEarth::Registry::shaderGenerator().run( myNode );
`
之后,您的节点将包含允许osgearth正确渲染的明暗器片段,并允许它与其他osgearth功能(如天空照明)一起使用。
#为什么我的线条或批注没有渲染?
使用需要设置某些初始状态的着色器渲染线条。可以将此状态应用于顶级摄影机(或几何体上方的任何其他位置),如下所示:
`c++
#include <osgEarth/GLUtils>
...
GLUtils::setGlobalDefaults(camera->getOrCreateStateSet());
`
对于批注 (FeatureNode , PlaceNode 等)最佳做法是将Annotation节点作为 MapNode 在场景图中。您还可以将它们添加到 `AnnotationLayer
`并将该图层添加到地图中。
批注需要访问 MapNode 以便正确渲染。如果不能将它们放在 MapNode ,您必须手动安装一些东西才能使它们工作:
``` C++#include<osgEarth/CullingUtils>#include<osgEarth/GLUtils>.
//手动为您的批注分配MapNode Node->setMapNode(MapNode);
//在批注上方的某个组中,安装该回调组->addCullCallback(new InstallViewportSizeUniform());
//在批注上方的某个组中,设置总账默认值GLUtils::setGlobalDefaults(group->getOrCreateStateSet()); ```
再说一遍: MapNode 自动执行所有这些操作,因此仅当您不将批注作为 MapNode 。
#文本注释(LabelNode、PlaceNode)不渲染。为什么?
渲染文本需要禁用OSG的小功能剔除,如下所示:
``C++ view->getCamera()->setSmallFeatureCullingPixelSize(-1.0f); ` `注意:每个摄像头都必须这样做。
##社区与支持
#使用GitHub的最佳实践是什么?
使用OSGearth存储库的最佳方法是在Github上创建自己的克隆并从该克隆中工作。为什么不直接针对主存储库工作?您可以,但是如果您需要进行更改、错误修复等,您将需要自己的克隆来发出请求。
创建自己的GitHub帐户并登录。
克隆osgearth repo。
从克隆中工作。定期将其同步到主存储库以获取最新更改。
#如何向osgEarth提交更改?
我们接受通过GitHub的贡献和错误修复 [拉取请求] (https://help.github.com/articles/using-pull-requests)机制。
首先,您需要自己的Github帐户和回购分支(见上文)。接下来,遵循以下准则:
创建一个 分支 在其中进行更改。
做出改变。
发行A 拉取请求 与OSGerth主存储库相对应。
我们将回顾 PR 包括在内。
如果我们决定不包含您的深渊翻滚,您仍然可以将其保存在我们的克隆存储库中并自己使用。这样做可以保持对osgEarth许可证的遵从性,因为您的更改仍然对公众可用-即使它们没有合并到主资料库中。
#我可以雇人帮我安装osgEarth吗?
当然了!我们鹈鹕地图公司从事的业务是支持osgEarth SDK的用户,并提供承包、培训和集成服务。与我们联系的最简单方式是通过我们的网站。 [联系人表单] (http://pelicanmapping.com/?page_id=2).)