概述
#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();
}
最后
以上就是整齐战斗机为你收集整理的osgearth3.2在地球上加载模型的全部内容,希望文章能够帮你解决osgearth3.2在地球上加载模型所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复