当前位置: 首页 > 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不是内部或外部命令,也不是可运行的程序
  • 算法分析传输加密数据格式密文存储代码混淆逆向保护
  • 新华每日电讯:从上海街区经济看账面、市面、人面、基本面
  • 君亭酒店:2024年营业收入约6.76亿元, “酒店行业传统增长模式面临巨大挑战”
  • 第五届全国医院人文管理路演在昆山举办:患者体验才是温度计
  • 多地征集农村假冒伪劣食品违法线索,全链条整治“三无”产品
  • 在上海生活8年,13岁英国女孩把城市记忆写进歌里
  • 全球首台环形CT直线加速器在沪正式开机,系我国自主研发