osg实现地球并在指定经纬度放置一个飞机模型(非osgEarth方式)

news2024/10/5 16:19:52

代码如下:

#include<osgViewer/Viewer>
#include<osgGA/TrackBallManipulator>
#include<osg/Shape>
#include<osg/ShapeDrawable>
#include<osg/Texture2D>
#include<osgDB/readFile>
#include<osg/MatrixTransform>
#include<osg/PositionAttitudeTransform>
int main(int argc, char*argv[])
{
	osg::ArgumentParser arguments(&argc, argv);

    osgViewer::Viewer viewer(arguments);
	viewer.setThreadingModel(osgViewer::Viewer::SingleThreaded);
	viewer.setRunFrameScheme(osgViewer::Viewer::CONTINUOUS);
	viewer.setCameraManipulator(new osgGA::TrackballManipulator);

	osg::ref_ptr<osg::Group> m_spRoot = new osg::Group;

    // 精细度设置
    osg::TessellationHints* hints = new osg::TessellationHints;

    hints->setDetailRatio(5.0f);

    // 新建半径为WGS84参考半径的球。即地球半径为6356752.3142米
    osg::ShapeDrawable* sd = new osg::ShapeDrawable(
        new osg::Sphere(osg::Vec3(0.0, 0.0, 0.0), osg::WGS_84_RADIUS_POLAR), hints);

    osg::Geode* geode = new osg::Geode;
    geode->addDrawable(sd);

    // 添加全球的纹理,图片的OSG资源Data中的图片,即使下载osg时附带的图片、模型数据资源文件夹下的图片
    geode->getOrCreateStateSet()->setTextureAttributeAndModes(0,

        /*注意:这里需要读取jpg,故请保证jpg插件存在,否则读取jpg会失败.  注意:这里需要读取jpg,故请保证jpg插件存在,否则读取jpg会失败。
        关于怎么编译jpg插件到osg,请参见:https://blog.csdn.net/danshiming/article/details/115412956
        */
        new osg::Texture2D(osgDB::readImageFile(R"(E:\osg\OpenSceneGraph-Data\Images\land_shallow_topo_2048.jpg)")));

    // 经纬度坐标处理
    osg::ref_ptr<osg::CoordinateSystemNode> spCsn = new osg::CoordinateSystemNode;

    // 设置地球坐标系统为WGS_84,即:经纬度、高程坐标系。
    auto pEllModel = new osg::EllipsoidModel();
    spCsn->setEllipsoidModel(pEllModel);
    spCsn->addChild(geode);

    osg::ref_ptr<osg::Group> spModelRoot = new osg::Group; // 模型根节点

    osg::ref_ptr<osg::MatrixTransform> spMatrixTrans = new osg::MatrixTransform;

    // 读取j-10飞机模型
    auto pNode = osgDB::readNodeFile(R"(E:\osg\OpenSceneGraph-Data\glider.osg)");
    spMatrixTrans->addChild(pNode);
    auto matrix = spMatrixTrans->getMatrix();
    matrix.makeScale(osg::Vec3(10000000, 10000000, 10000000)); // 将飞机放大些,否则和地球相比大小,看不见。
    spMatrixTrans->setMatrix(matrix);

    // 设置飞机在地球的经纬度位置。即将经纬度高程坐标转为地心地固坐标系
    double x, y, z; // 分别表示离地球球心的 x, y, z距离,单位为米。

    // 下面函数参数是以弧度、米为单位的。飞机在北京上空
    pEllModel->convertLatLongHeightToXYZ(osg::DegreesToRadians(39.6), osg::DegreesToRadians(116.35), 1000000, x, y, z);

    osg::ref_ptr<osg::PositionAttitudeTransform> spPosition = new osg::PositionAttitudeTransform;
    spPosition->addChild(spMatrixTrans);

    spModelRoot->addChild(spPosition);

    spCsn->addChild(spModelRoot);
    m_spRoot->addChild(spCsn);

    viewer.getCamera()->setNearFarRatio(0.00001f);
    viewer.setSceneData(m_spRoot);
    
    viewer.run();
}

效果如下:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/442520.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux环境对Nginx开源版源码下载、编译、安装、开机自启

一、准备内容Centos8安装yum源https://blog.csdn.net/xiaochenXIHUA/article/details/127251704?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168197299116800211534092%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%

网络安全与攻防-同源策略

目录 同源策略&#xff08;浏览器控制&#xff09; 定义 思考&#xff1a; 跨域的N种方法 Jsonp 跨域资源共用&#xff08;CORS&#xff09; 预检&#xff08;OPTIONS请求&#xff09; 代理服务&#xff08;优先考虑&#xff09; 实战CORS&#xff08;Fetchnode.js&…

利用校正板对无人机影像辐射校正

无人机影像上获取到的数据是反映传感器对光响应的数值特征&#xff08;即DN值&#xff09;&#xff0c;但DN值与环境光强及相机参数有关&#xff0c;只有将其转换为反射率才能较好的反映地物的特征。一般的转换方法是使用二向反射率已知的校正板进行「单点比值」&#xff08;只…

WINNER电比例插装阀放大器

WINNER插装阀分类&#xff1a;双向流量控制阀、提动轴型单向止回常闭比例流量阀、双向流量控制常开比例压力补偿、导压级比例泄压阀、直动型降压比例泄压阀&#xff1b; 比例控制阀是一种按输入的电信号连续、按比例地控制液压系统的流量、压力和 方向的控制阀&#xff0c;其输…

SpringBoot项目的创建和使用

目录 一&#xff0c;SpringBoot 1&#xff0c;什么是SpringBoot 2&#xff0c;SpringBoot的优点 二&#xff0c;SpringBoot项目的创建和使用 1&#xff0c;项目的创建 创建方式 使用Idea创建(统一使用Idea社区版2021.x版本) 使用网页版创建&#xff08;使用Spring官网&a…

(已解决)关键词爬取百度搜索结果,返回百度安全验证,网络不给力,请稍后重试,无法请求到正确数据的问题

已解决&#xff0c;使用关键词进行百度搜索&#xff0c;然后爬取搜索结果&#xff0c;请求数据后&#xff0c;返回的是百度安全验证&#xff0c;网络不给力&#xff0c;请稍后重试。无法请求到正确数据。且尝试在header中增加Accept参数还是不行。 一、问题产生的现象 在学习过…

2024年江苏专转本到底多难?

相比较普通高考的难度来说&#xff0c;专转本的难度不算大且录取率更高一点。所以只要好好复习&#xff0c;上岸还是很容易的。&#xff08;一&#xff09;、语文的难度分析对比2022年及2023年语文的考试情况&#xff0c;考试的难度差别不大&#xff0c;也就是说语文的难度整体…

生产区域人数超员识别监测算法 yolov5

生产区域人数超员监控报警系统通过yolov5python网络模型分析技术&#xff0c;生产区域人数超员识别监测算法模型识别到现场画面区域超员时&#xff0c;立即告知后台中心进行告警提醒及时处理。Yolo意思是You Only Look Once&#xff0c;它并没有真正的去掉候选区域&#xff0c;…

C++初阶(初识命名空间及输入输出)

C是在C的基础之上&#xff0c;容纳进去了面向对象编程思想&#xff0c;并增加了许多有用的库&#xff0c;以及编程范式 等。熟悉C语言之后&#xff0c;对C学习有一定的帮助&#xff0c;本章节主要目标: 1. 补充C语言语法的不足&#xff0c;以及C是如何对C语言设计不合理的地方…

spring boot3.0新特性Http客户端远程调用

1、安装依赖 <!-- For reactive support --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></dependency>2、项目结构 3、新建配置类WebConfig package com.exa…

局域网可使用的远程工具有哪些

推荐一些局域网可使用的远程工具。 1、Splashtop&#xff1a;Splashtop 的效果非常好。 性能出色&#xff0c;拖放文件传输在不同平台之间工作&#xff0c;甚至还有语音聊天。Splashtop Personal 在局域网免费使用&#xff0c;性能出色&#xff0c;是不可多得的免费局域网远程…

进阶项目 01 使用@value注解,@ConfigurationProperties ,@PropertySource和properties文件

这可能是分布式开发的前奏&#xff0c;什么是分布式开发&#xff0c;一般在学校里面写的springboot项目&#xff0c;只有application.properties或者是application.yml文件中的一个配置信息&#xff0c;例如&#xff1a; application.yml文件中&#xff1a; #server server:po…

ServletConfig和ServletContext 的介绍和代码实现

目录 ServletConfig ServletConfig 基本介绍 ServletConfig 类能干什么 为什么需要 ServletContext 1. 方案 1-DB 2. 方案 2-ServletCntext 代码实战 ServletContext ServletContext 基本介绍 ServletContext 可以做什么 代码实战 代码实战2 ServletConfig Servle…

机器学习实战教程(八):多项式回归

多项式回归 概念 线性回归研究的是一个因变量与一个自变量之间的回归问题。 多项式回归是指在线性回归的基础上&#xff0c;通过增加非线性特征来拟合非线性数据的方法。多项式回归模型可以用一个 n 次多项式函数来近似描述目标变量和输入变量之间的关系。例如&#xff0c;对…

在更高的起点创业 专访Aqara重庆服务商,探问「经营秘籍」

从小众产品到大众选择&#xff0c;智能家居在短短几年内迅速崛起&#xff0c;成为各大Shopping Mall的引流神器。而作为一种新消费&#xff0c;智能家居产品也为品牌和渠道在获客方面提出了新的考验。相比传统建材&#xff0c;智能家居如何快速引流&#xff0c;促进成交&#x…

Baumer工业相机堡盟工业相机如何联合BGAPISDK和OpenCVSharp实现图像的伽马变换算法增强(C#)

Baumer工业相机堡盟工业相机如何联合BGAPISDK和OpenCVSharp实现图像的拉普拉斯算法增强&#xff08;C#&#xff09; Baumer工业相机Baumer工业相机使用图像算法增加图像的技术背景Baumer工业相机通过BGAPI SDK联合OpenCV使用图像增强算法1.引用合适的类文件2.BGAPI SDK在图像回…

Obsidian插件推荐:使用Text Snippets打公式

Obsidian插件推荐&#xff1a;使用Text Snippets打公式 更新&#xff1a;突然发现还有好多可以用的插件&#xff0c;这个可能不是最佳的。比如 Quick Latex for Obsidian和latex suite等 GitHub - ArianaKhit/text-snippets-obsidian: Snippets plugin for obsidian 最近在O…

产品做的好不好,咋判断?

产品做的好不好&#xff0c;咋判断&#xff1f;看优秀公司 怎么拆解分析产品 趣讲大白话&#xff1a;把事情做细致&#xff0c;效果惊人 【趣讲信息科技134期】 **************************** 设计产品是一个复杂学问 市面上很少有成熟的方法 华与华公开了一些&#xff0c;很受…

JavaSE学习进阶day03_03 Object类

第三章 Object类 介绍这个类之前&#xff0c;先回顾一下API&#xff1a; 3.1 概述 java.lang.Object类是Java语言中的根类&#xff0c;即所有类的父类。它中描述的所有方法子类都可以使用。在对象实例化的时候&#xff0c;最终找的父类就是Object。 如果一个类没有特别指定父…

二、vue之初体验-案例体验

一、案例体验一&#xff1a;动态展示Hello World数据 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"view…