osgearth3.2在地球上加载模型

 

#include <Windows.h>
#include <osgViewer/Viewer>
#include <osgEarth/EarthManipulator>
#include <osgDB/ReadFile>
#include <osgEarth/GeoTransform>
#include <osgEarth/AutoClipPlaneHandler>
#include <osg/PositionAttitudeTransform>
#include <osgGA/StateSetManipulator>
#include <osgViewer/ViewerEventHandlers>

#ifdef _DEBUG
//osg库一共19个
#pragma comment(lib, "osgd.lib")
#pragma comment(lib, "osgDBd.lib")
#pragma comment(lib, "osgFXd.lib")
#pragma comment(lib, "osgViewerd.lib")
#pragma comment(lib, "osgVolumed.lib")
#pragma comment(lib, "OpenThreadsd.lib")
#pragma comment(lib, "osgGAd.lib")
#pragma comment(lib, "osgUtild.lib")
#pragma comment(lib, "osgManipulatord.lib")
#pragma comment(lib, "osgTextd.lib")
#pragma comment(lib, "osgSimd.lib")
#pragma comment(lib, "osgTerraind.lib")
#pragma comment(lib, "osgWidgetd.lib")
#pragma comment(lib, "osgUId.lib")
#pragma comment(lib, "osgShadowd.lib")
#pragma comment(lib, "osgAnimationd.lib")
#pragma comment(lib, "osgParticled.lib")
#pragma comment(lib, "osgPresentationd.lib")
#pragma comment(lib, "osgQOpenGLd.lib")
//osgearth库1个
#pragma comment(lib, "osgEarthd.lib")
//其他库2个
#pragma comment(lib, "glu32.lib") 
#pragma comment(lib, "opengl32.lib")
#else
#pragma comment(lib, "osg.lib")
#pragma comment(lib, "osgDB.lib")
#pragma comment(lib, "osgFX.lib")
#pragma comment(lib, "osgViewer.lib")
#pragma comment(lib, "osgVolume.lib")
#pragma comment(lib, "OpenThreads.lib")
#pragma comment(lib, "osgGA.lib")
#pragma comment(lib, "osgUtil.lib")
#pragma comment(lib, "osgManipulator.lib")
#pragma comment(lib, "osgText.lib")
#pragma comment(lib, "osgSim.lib")
#pragma comment(lib, "osgTerrain.lib")
#pragma comment(lib, "osgWidget.lib")
#pragma comment(lib, "osgUI.lib")
#pragma comment(lib, "osgShadow.lib")
#pragma comment(lib, "osgAnimation.lib")
#pragma comment(lib, "osgParticle.lib")
#pragma comment(lib, "osgPresentation.lib")
#pragma comment(lib, "osgQOpenGL.lib")

#pragma comment(lib, "osgEarth.lib")

#pragma comment(lib, "glu32.lib") 
#pragma comment(lib, "opengl32.lib")
#endif;


int main(int argc, char** argv)
{
	osgEarth::initialize();
	osgViewer::Viewer *viewer = new osgViewer::Viewer;
	osg::Group* root = new osg::Group;
	osg::Node*earth = osgDB::readNodeFile("simple.earth");
	root->addChild(earth);
	//添加状态事件,可以相应键盘和鼠标事件,响应L T B W
	viewer->addEventHandler(new osgGA::StateSetManipulator(viewer->getCamera()->getOrCreateStateSet()));
	//窗口大小变化,响应F
	viewer->addEventHandler(new osgViewer::WindowSizeHandler);
	//添加路径记录 Z
	viewer->addEventHandler(new osgViewer::RecordCameraPathHandler);
	//帮助文档显示H
	viewer->addEventHandler(new osgViewer::HelpHandler);
	//截屏 C
	viewer->addEventHandler(new osgViewer::ScreenCaptureHandler);
	//添加一些常用状态设置,响应S
	viewer->addEventHandler(new osgViewer::StatsHandler);
	osgEarth::Util::EarthManipulator*em = new osgEarth::Util::EarthManipulator;
	viewer->setCameraManipulator(em);
	osgEarth::MapNode*mapNode = osgEarth::MapNode::findMapNode(earth);
	viewer->getCamera()->addCullCallback(new osgEarth::Util::AutoClipPlaneCullCallback(mapNode));

	//先在坐标原点绘制三维曲面,再通过GeoTransform将绘制结果转移到雷达的经纬坐标处
	osgEarth::GeoTransform* xform = new osgEarth::GeoTransform();
	xform->setPosition(osgEarth::GeoPoint(osgEarth::SpatialReference::get("wgs84"), 116.0, 40.0, 10,osgEarth::AltitudeMode::ALTMODE_RELATIVE));
	// 局部坐标系
	osg::PositionAttitudeTransform* pat = new osg::PositionAttitudeTransform;
	pat->setUserValue("pos", osg::Vec3d(116.0, 40.0, 10));
	//pat->setScale(osg::Vec3(20.0, 20.0, 20.0));
	xform->addChild(pat);
	pat->addChild(osgDB::readNodeFile("cow.osg"));
	root->addChild(xform);
	viewer->setSceneData(root);

	em->setViewpoint(osgEarth::Viewpoint("", 116.0, 40.0, 10.0, 0.0, -90.0, 100), 5);

	return viewer->run();
}

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

aspiretop

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值