一个在osgEarth中加载模型的小示例,方便在此基础上进行其它场景编辑,资源为osgEarth自带Data。

#include "common.h"
#include <Windows.h>namespace
{void adjustWindow(osgViewer::Viewer*viewer,const unsigned int x, const unsigned int y,const unsigned int w, const unsigned int h){osg::ref_ptr<osg::GraphicsContext::Traits>trait = new osg::GraphicsContext::Traits;trait->x = x;trait->y = y;trait->width = w;trait->height = h;trait->doubleBuffer = true;trait->windowDecoration = true;trait->sharedContext = 0;osg::ref_ptr<osg::GraphicsContext>gc = osg::GraphicsContext::createGraphicsContext(trait);viewer->getCamera()->setGraphicsContext(gc);viewer->getCamera()->setViewport(new osg::Viewport(0, 0, trait->width, trait->height));GLenum buffer = trait->doubleBuffer ? GL_BACK : GL_FRONT;viewer->getCamera()->setDrawBuffer(buffer);viewer->getCamera()->setReadBuffer(buffer);}
}int main(int argc, char* argv[])
{osg::ref_ptr<osgViewer::Viewer>viewer = new osgViewer::Viewer;//操作器osg::ref_ptr<osgEarth::Util::EarthManipulator> earthManipulator = new osgEarth::Util::EarthManipulator;viewer->setCameraManipulator(earthManipulator);//根节点osg::ref_ptr<osg::Group>root = new osg::Group;//加载地球节点osg::Node* earthNode = osgDB::readNodeFile("world.earth");root->addChild(earthNode);osgEarth::MapNode* mapNode = osgEarth::MapNode::findMapNode(earthNode);if (!mapNode) return;            const osgEarth::SpatialReference* geoSRS = mapNode->getMapSRS()->getGeographicSRS();//添加模型{osg::Node* model = osgDB::readNodeFile("cow.osg");//osg中光照只会对有法线的模型起作用,而模型经过缩放后法线是不会变得,//所以需要手动设置属性,让法线随着模型大小变化而变化。GL_NORMALIZE 或 GL_RESCALE_NORMALmodel->getOrCreateStateSet()->setMode(GL_RESCALE_NORMAL, osg::StateAttribute::ON);osg::Matrix Lmatrix;geoSRS->getEllipsoid()->computeLocalToWorldTransformFromLatLongHeight(osg::DegreesToRadians(40.0), osg::DegreesToRadians(116.0), 100000.0, Lmatrix);//放大一些,方便看到Lmatrix.preMult(osg::Matrix::scale(osg::Vec3(10000, 10000, 10000)));osg::MatrixTransform* mt = new osg::MatrixTransform;mt->setMatrix(Lmatrix);mt->addChild(model);root->addChild(mt);}viewer->setSceneData(root);//配置窗口adjustWindow(viewer, 100, 100, 720, 576);//视点定位北京地区earthManipulator->setViewpoint(osgEarth::ViewPoint("", 116, 40, 0.0, -2.50, -90.0, 1.5e6));return viewer->run();
}

world.earth文件内容如下:

<map><image name="bluemarble" driver="gdal">  <url>./OsgEarth2.8_SDK/data/world.tif</url>  </image>
</map>

在osgEarth中添加模型的简单示例相关推荐

  1. php 替换 超链接,php 替换字符串所有url为超链接,并给超链接添加nofollow的简单示例...

    把字符串中的url替换成可点击的链接,默认给链接添加nofollow,即不允许搜索引擎搜索,感兴趣的小伙伴,下面一起跟随512笔记的小编罗X来看看吧. 经测试代码如下: /** * 字符串中的url替 ...

  2. huggingface中Bert模型的简单使用

    因为项目和毕设的缘故,做了挺多关于Bert分类的实际操作的,本文主要记录下transformers库中使用较多的类. 在本文中,你将看到 huggingface(hf)中Bert模型的简单介绍 Ber ...

  3. 如何在 Flutter 中添加 ListTile:带示例的教程

    大多数时候,您可能会发现自己使用某种预定义格式填充 ListView.您可以使用 Flutter 中称为ListTile小部件的现成小部件来提供帮助,而不是自己使用行.列和容器创建此布局. 在本教程中 ...

  4. .net安装部署中添加卸载程序简单方法

    在你得安装部署里添加msiexec.exe,这个文件在装了.net的机子上windows    nt/system32/文件夹下,然后把这个文件创建一个快捷方式"卸载××系统",把 ...

  5. Qt中UDP通信的简单示例

    udp通信分为发送端和接收端,通信步骤可以分为以下: 接收端: 创建QUdpSocket对象.在.h文件中添加类的前置声明,定义该类的指针,在.cpp的构造函数中定义指向该类的指针. bind().绑 ...

  6. OsgEarth中设置模型运动路径,并绘制雷达扫描、动态实时绘制运动轨迹、跟随彩带

    工程结构 需求 加载机场和飞机 创建飞机历史航迹 设置飞机视角跟随 并设置飞行路径 创建飞机飞行彩带 计算飞机飞行姿态 TrailerCallback.h TrailerCallback.cpp Cr ...

  7. aspen中添加模型上没有物流箭头

    预热器加热后进塔底加热炉时物流画不上,一直是一个白色箭头  如果遇到了这种情况 ASPEN PLUS中我们建立一个模型,看到加热炉上并没有箭头,没法添加流股,连不上.这时候我们可以用鼠标拖动箭头到你想 ...

  8. Erlang中使用变量的简单示例

    1. 赋值 1> X = 100. 100 以上只是简单的声明了一个变量X,并为其赋值100.记得在以句号结尾.回车后会自动显示当前X的值100. 2.运算 2> X*X*X. 10000 ...

  9. excel怎么添加换行符_在Excel公式中添加换行符

    excel怎么添加换行符 在Excel公式中添加换行符 (Add Line Break in Excel Formula) It's easy to add a line break when you ...

最新文章

  1. 通过Exchange online实现HAB功能
  2. 【算法基础】数据结构导论第七章-排序.pptx
  3. 【CSS3】 理解CSS3 transform中的Matrix(矩阵)
  4. mybatis SqlMapConfig.xml mappers
  5. 人工智能--一种现代的方法(知识点总结第一章)
  6. 浦发银行 信息科技岗 大数据方向 面经
  7. DGPS和RTK的区别
  8. ESP32播放MP3音乐-无需SD卡-WM8978-ESP32解码MP3
  9. 2021Java实现关注公众号登陆网站
  10. 用scratch2.0编飞机大战
  11. back_insert_iterator
  12. 实体门店营销,抽奖系统为何独占鳌头
  13. {转载}circos绘图(3)
  14. Linux nohup bash cm_watch.sh >> run.log 2>1
  15. 华中科技大学操作系统实验课 实验四
  16. c语言替换字符串中的子串
  17. 总结一周:变量,数据类型,循环,函数
  18. python 请假审批系统_基于工作流的请假审批系统设计与实现
  19. ENC28J60学习笔记——第1部分
  20. linux异步io 回调函数,Linux异步IO

热门文章

  1. markman,让设计更有爱!
  2. 多重递归强制退出办法 -以下简称办法
  3. EasyExcel生成多个exel文件并zip压缩
  4. 【附源码】Java计算机毕业设计安卓在线民宿预定app(程序+LW+部署)
  5. 【综合算法】不考虑误差的TDOA定位
  6. Css的字体样式属性大全
  7. stack.peek
  8. DBeaver设置Maven镜像仓库
  9. Modularity的计算方法——社团检测中模块度计算公式详解(转)
  10. c++中x的y次方怎么求