繁体   English   中英

任何将高度设置为形状的方法

[英]Any way to set an altitude to a Shape

我正在研究表面椭圆的世界风,但是我想为该椭圆设置高度。

我尝试使用moveTo方法,或直接在构造函数中实例化一个elevation ,但没有任何效果,并且我的形状仍然固定在该行星上。

这是我创建形状的方法:

final SurfaceEllipse shape = new SurfaceEllipse();
shape.setRadii(100000, 100000);
shape.moveTo(Position.fromDegrees(50.0, 0.0, 50*20000)); // just a test
layer.addRenderable(shape);

Position确实的确会升高 ,这只是double并且与海拔高度相同(至少根据Position的吸气剂)。

但是, SurfaceEllipse实现了SurfaceObject接口,该接口记录为:

在Globe的表面地形上绘制的可渲染对象的通用界面,例如SurfaceShape。 SurfaceObject实现了Renderable和PreRenderable接口,因此曲面对象可以聚合在任何层中或某些任意渲染代码中。

要注意的关键词是“绘制在地球仪的地面地形上”。 您无法设置海拔高度。 它必须是该位置处地球表面的高程。 因此,您可以阅读它,但不能进行设置。

我建议使用其他类来制作形状。 围绕类继承结构反弹,您可能会发现可以做您想做的事情。

AbstractGeneralShape将模型位置记录为:

此形状的地理位置。 高度是相对于此形状高度模式的。

因此, AbstractGeneralShape下的任何类都具有高度模式的概念。

AbstractShape也具有altitudeMode ,在其下是path ,该类最终记录了海拔高度模式。

路径将海拔模式记录为:

路径位置内的高度根据路径的高度模式进行解释。 如果高度模式为WorldWind.ABSOLUTE,则将高度视为椭圆体上方的高度。 如果高度模式为WorldWind.RELATIVE_TO_GROUND,则将高度添加到该位置处的地形高程。 如果高度模式为WorldWind.CLAMP_TO_GROUND,则将忽略高度。

因此,要执行您想要的操作,需要确保您不在WorldWind.CLAMP_TO_GROUND高度模式下。

考虑到这一点,看看椭圆形

由中心位置和三个椭球轴半径定义的一般椭球体。 如果A是南北方向的半径,b是东西方向的半径,c是垂直方向(高度增加)的半径,则A == B == C定义一个球体, A == B> C定义一个垂直扁平的球体(盘形),A == B <C定义一个垂直拉伸的球体。

这么说是很费劲的:

椭球

使C足够小,可以很好地近似二维椭圆。

但是,它实际上仍然是三维的。 我发现,大多数具有altitudeMode都是3D, Path除外。 路径具有一些有趣的地形属性。

可能是您希望椭圆在内部打开。 在三个维度上称为圆环。 他们看起来像这样:

椭圆环

不幸的是,我在worldwind API中找不到这种形状。 但是,您可以拖拉并从头开始创建自己的形状。 http://goworldwind.org/developers-guide/how-to-build-a-custom-renderable/

我在API中找到的最接近的是ExtrudedPolygon ,它采用一个多边形并允许您添加高度。 定义多边形的形状由您决定。 拉伸形状如下所示:

挤压叶

他们总是让我想起玩偶:

玩h工厂

希望能帮助到你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM