当前位置: 首页 > news >正文

GIS开发笔记(9)结合osg及osgEarth实现三维球经纬网格绘制及显隐

一、实现效果
在这里插入图片描述

二、实现原理
按照5°的间隔分别创建经纬线的节点,挂在到组合节点,组合节点挂接到根节点。可以根据需要设置间隔度数和线宽、线的颜色。

三、参考代码

//创建经纬线的节点
osg::Node *GlobeWidget::createGraticuleGeometry(float interval, const osg::Vec4 &color)
{osg::ref_ptr<osg::Geode> geode = new osg::Geode;osg::ref_ptr<osg::Geometry> geom = new osg::Geometry;osg::ref_ptr<osg::Vec3Array> vertices = new osg::Vec3Array;osg::ref_ptr<osg::Vec4Array> colors = new osg::Vec4Array;// 设置颜色colors->push_back(color);geom->setColorArray(colors, osg::Array::BIND_OVERALL);// 生成经线(间隔为interval度)for (float lon = -180.0f; lon <= 180.0f; lon += interval){for (float lat = -89.9f; lat <= 89.9f; lat += 1.0f){osgEarth::GeoPoint pt(osgEarth::SpatialReference::get("wgs84"), lon, lat, 0);osg::Vec3d world;pt.toWorld(world);vertices->push_back(world);}geom->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::LINE_STRIP,vertices->size() - 180, 180));}// 生成纬线(间隔为interval度)for (float lat = -90.0f; lat <= 90.0f; lat += interval){for (float lon = -180.0f; lon <= 180.0f; lon += 1.0f){osgEarth::GeoPoint pt(osgEarth::SpatialReference::get("wgs84"), lon, lat, 0);osg::Vec3d world;pt.toWorld(world);vertices->push_back(world);}geom->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::LINE_STRIP,vertices->size() - 361, 361));}geom->setVertexArray(vertices);// 设置线宽osg::ref_ptr<osg::LineWidth> lw = new osg::LineWidth(1.5f);geom->getOrCreateStateSet()->setAttribute(lw);// 配置渲染状态(防止被地形遮挡)osg::StateSet* ss = geom->getOrCreateStateSet();ss->setMode(GL_DEPTH_TEST, osg::StateAttribute::ON);// 修复:使用全限定类名 osg::Depthss->setAttribute(new osg::Depth(osg::Depth::LEQUAL, 0, 1, false));ss->setRenderingHint(osg::StateSet::TRANSPARENT_BIN);geode->addDrawable(geom);return geode.release();
}
//控制经纬线显示隐藏
void GlobeWidget::gridVisible(bool visible)
{if (m_graticuleGroup) {m_graticuleGroup->setNodeMask(visible ? 0xFFFFFFFF : 0x0);}
}

相关文章:

  • Nginx静态资源跳转添加权限验证
  • optool为macho文件增加动态库
  • 从零创建 Docker 镜像(基于 OCI 格式)
  • Datawhale 春训营 创新药赛道
  • Linux 进程概念补充 (自用)
  • 代理模式(Proxy Pattern)
  • vue3 excel文件导入
  • 贝叶斯分类器:原理、算法与应用详解
  • 位运算,状态压缩dp(算法竞赛进阶指南学习笔记)
  • 【Java】接口interface学习
  • 残烛与风儿的对话
  • OC底层原理【一】 alloc init new
  • java单元测试不能点击run运行测试方法
  • 【第二天】一月速通Python第二天,函数,数据容器,列表,元组,字典。
  • 论文阅读:2023 arxiv A Survey of Reinforcement Learning from Human Feedback
  • 集成运放的关键技术参数
  • 7.0/Q1,Charls最新文章解读
  • 【Oracle专栏】Oracle中的虚拟列
  • pnpm确认全局下载安装了还是显示cnpm不是内部或外部命令,也不是可运行的程序
  • 算法分析传输加密数据格式密文存储代码混淆逆向保护
  • 税率飙至3500%!美国双反大棒重击东南亚光伏,中企如何应对
  • 建行深圳市分行原副行长李华峰一审被判15年
  • 深一度|坚守17年,这件事姚明就算赔钱也在继续做
  • 专家学者视角下的乡村教育:目标与出路并非“走出大山”
  • 庆祝中国印尼建交75周年招待会暨万隆会议70周年纪念活动在京举行
  • 上海市政府常务会议部署多措并举促进消费,提高居民收入,减轻家庭负担