Worldwind PointPlacemark setPitch失效排查:疑与PointPlacemark.java中JOGL代码有关
排查PointPlacemarkAttributes.setPitch()失效问题:聚焦JOGL代码片段
我最近在排查PointPlacemarkAttributes.setPitch()方法无法正常工作的问题,把疑点锁定在了PointPlacemark.java里的这段JOGL代码,感觉这里大概率是问题的源头:
Double heading = getActiveAttributes().getHeading(); Double pitch = getActiveAttributes().getPitch(); // 根据地球或屏幕调整航向 if (heading != null) { if (AVKey.RELATIVE_TO_GLOBE.equals(this.getActiveAttributes().getHeadingReference())) heading = dc.getView().getHeading().degrees - heading; // (注:原代码片段此处截断) }
初步分析与排查方向
从这段代码能明显看出几个不对劲的地方:
- 代码只处理了**heading(航向)**的参考系转换逻辑(区分地球相对/屏幕相对),但完全没有对
pitch变量做任何处理——既没有适配参考系,也没看到它被传递到后续的渲染变换中,这很可能就是setPitch()不生效的核心原因。 - 先确认
getActiveAttributes().getPitch()是否能正确拿到你通过setPitch()设置的值:会不会是属性在传递过程中出现了空值、未初始化,或者被其他逻辑覆盖的情况? - 检查这段代码之后的渲染逻辑:有没有在构建模型视图矩阵时,只应用了heading的旋转变换,却漏掉了pitch对应的俯仰变换?
- 参考heading的处理逻辑,pitch大概率也需要参考系适配:比如要区分是相对于地球表面的俯仰,还是相对于屏幕视角的俯仰,这段代码里完全没做这个判断。
内容的提问来源于stack exchange,提问作者mainstringargs
相关产品推荐
相关产品推荐

