在osgEarth中添加模型的简单示例
一个在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中添加模型的简单示例相关推荐
- php 替换 超链接,php 替换字符串所有url为超链接,并给超链接添加nofollow的简单示例...
把字符串中的url替换成可点击的链接,默认给链接添加nofollow,即不允许搜索引擎搜索,感兴趣的小伙伴,下面一起跟随512笔记的小编罗X来看看吧. 经测试代码如下: /** * 字符串中的url替 ...
- huggingface中Bert模型的简单使用
因为项目和毕设的缘故,做了挺多关于Bert分类的实际操作的,本文主要记录下transformers库中使用较多的类. 在本文中,你将看到 huggingface(hf)中Bert模型的简单介绍 Ber ...
- 如何在 Flutter 中添加 ListTile:带示例的教程
大多数时候,您可能会发现自己使用某种预定义格式填充 ListView.您可以使用 Flutter 中称为ListTile小部件的现成小部件来提供帮助,而不是自己使用行.列和容器创建此布局. 在本教程中 ...
- .net安装部署中添加卸载程序简单方法
在你得安装部署里添加msiexec.exe,这个文件在装了.net的机子上windows nt/system32/文件夹下,然后把这个文件创建一个快捷方式"卸载××系统",把 ...
- Qt中UDP通信的简单示例
udp通信分为发送端和接收端,通信步骤可以分为以下: 接收端: 创建QUdpSocket对象.在.h文件中添加类的前置声明,定义该类的指针,在.cpp的构造函数中定义指向该类的指针. bind().绑 ...
- OsgEarth中设置模型运动路径,并绘制雷达扫描、动态实时绘制运动轨迹、跟随彩带
工程结构 需求 加载机场和飞机 创建飞机历史航迹 设置飞机视角跟随 并设置飞行路径 创建飞机飞行彩带 计算飞机飞行姿态 TrailerCallback.h TrailerCallback.cpp Cr ...
- aspen中添加模型上没有物流箭头
预热器加热后进塔底加热炉时物流画不上,一直是一个白色箭头 如果遇到了这种情况 ASPEN PLUS中我们建立一个模型,看到加热炉上并没有箭头,没法添加流股,连不上.这时候我们可以用鼠标拖动箭头到你想 ...
- Erlang中使用变量的简单示例
1. 赋值 1> X = 100. 100 以上只是简单的声明了一个变量X,并为其赋值100.记得在以句号结尾.回车后会自动显示当前X的值100. 2.运算 2> X*X*X. 10000 ...
- excel怎么添加换行符_在Excel公式中添加换行符
excel怎么添加换行符 在Excel公式中添加换行符 (Add Line Break in Excel Formula) It's easy to add a line break when you ...
最新文章
- 通过Exchange online实现HAB功能
- 【算法基础】数据结构导论第七章-排序.pptx
- 【CSS3】 理解CSS3 transform中的Matrix(矩阵)
- mybatis SqlMapConfig.xml mappers
- 人工智能--一种现代的方法(知识点总结第一章)
- 浦发银行 信息科技岗 大数据方向 面经
- DGPS和RTK的区别
- ESP32播放MP3音乐-无需SD卡-WM8978-ESP32解码MP3
- 2021Java实现关注公众号登陆网站
- 用scratch2.0编飞机大战
- back_insert_iterator
- 实体门店营销,抽奖系统为何独占鳌头
- {转载}circos绘图(3)
- Linux nohup bash cm_watch.sh >> run.log 2>1
- 华中科技大学操作系统实验课 实验四
- c语言替换字符串中的子串
- 总结一周:变量,数据类型,循环,函数
- python 请假审批系统_基于工作流的请假审批系统设计与实现
- ENC28J60学习笔记——第1部分
- linux异步io 回调函数,Linux异步IO