注意:
1.编译osg源码时,勾选osgQT 相关模块,这是对QT的支持
2.在QtPro文件中添加对应的库和目录
例如:
win32:INCLUDEPATH += C:/OpenSceneGraph/include \
win32:DEPENDPATH += C:/OpenSceneGraph/include
unix:!macx:INCLUDEPATH += .
win32:CONFIG(release, debug|release): LIBS += \
-LC:/OpenSceneGraph/lib/ -lOpenThreads \
-LC:/OpenSceneGraph/lib/ -losg \
-LC:/OpenSceneGraph/lib/ -losgAnimation \
-LC:/OpenSceneGraph/lib/ -losgDB \
-LC:/OpenSceneGraph/lib/ -losgFX \
-LC:/OpenSceneGraph/lib/ -losgGA \
-LC:/OpenSceneGraph/lib/ -losgManipulator \
-LC:/OpenSceneGraph/lib/ -losgParticle \
-LC:/OpenSceneGraph/lib/ -losgPresentation \
-LC:/OpenSceneGraph/lib/ -losgQt \
3. 编写CPP文件。
#include <QApplication>
#include <osgViewer/Viewer>
#include <osgGA/TrackballManipulator>
#include <osgQt/GraphicsWindowQt>
#include <osg/ShapeDrawable>
#include <osg/MatrixTransform>
#include <osgManipulator/TabBoxDragger>
#include <osgGA/StateSetManipulator>
#include <osgViewer/ViewerEventHandlers>
#include <osgDB/ReadFile>
#include <osg/Material>
#include <osg/Texture2D>
#include <osg/Vec3>
#include <osg/Vec4>
#include <osg/ShapeDrawable>
osg::ref_ptr<osg::Geode>CreateBox() {
osg::ref_ptr<osg::Geode>geode= new osg::Geode
osg::ref_ptr<osg::TessellationHints>hints= new osg::TessellationHints
osg::ref_ptr<osg::ShapeDrawable>shape= new osg::ShapeDrawable(new osg::Sphere(osg::Vec3(5.0,5.0,5.0),10.0))
osg::ref_ptr<osg::Material>material= new osg::Material
osg::ref_ptr<osg::Texture2D>texture= new osg::Texture2D
osg::ref_ptr<osg::Image>image= new osg::Image
hints->setDetailRatio(0.5)
//设置颜色
shape->setColor(osg::Vec4(0.1,0.5,0.5,0.5))
//设置材质
material->setAmbient(osg::Material::FRONT_AND_BACK,osg::Vec4(0.5,0.5,0.5,0.5))
material->setDiffuse(osg::Material::FRONT_AND_BACK,osg::Vec4(0.5,0.5,0.5,0.5))
material->setSpecular(osg::Material::FRONT_AND_BACK,osg::Vec4(0.5,0.5,0.5,0.5))
material->setShininess(osg::Material::FRONT_AND_BACK,0.6)
shape->getOrCreateStateSet()->setAttributeAndModes(material.get(),osg::StateAttribute::ON)
//设置纹理
image= osgDB::readImageFile("Images/land_shallow_topo_2048.jpg")
if(image->valid())
texture->setImage(image)
shape->getOrCreateStateSet()->setTextureAttributeAndModes(0,texture.get(),osg::StateAttribute::ON)
geode->addDrawable(shape)
return geode
}
int main( int argc, char** argv )
{
QApplication app(argc, argv)
osgQt::initQtWindowingSystem()
osg::Group* sceneroot = new osg::Group
sceneroot->addChild(CreateBox())
osg::ref_ptr<osgViewer::Viewer>viewer = new osgViewer::Viewer
viewer->addEventHandler(new osgViewer::StatsHandler)
viewer->setSceneData( sceneroot )
viewer->setCameraManipulator( new osgGA::TrackballManipulator )
osgQt::setViewer( viewer.get() )
osgQt::GLWidget* glw = new osgQt::GLWidget
osgQt::GraphicsWindowQt* graphicswin = new osgQt::GraphicsWindowQt(glw)
viewer->getCamera()->setViewport( new osg::Viewport(0, 0, glw->width(), glw->height() ) )
viewer->getCamera()->setGraphicsContext( graphicswin )
glw->show()
return app.exec()
}
4.效果图如下:
osgEarth::Util::Controls和你用什么界面没啥关系不知道你的代码中有没有这么使用Controls:
ControlCanvas* canvas = new ControlCanvas( &viewer )
root->addChild( canvas )
Grid* grid = new Grid()
canvas->addControl( grid )
grid->setControl( 0, 0, new LabelControl("距离:") )
LabelControl* label = new LabelControl()
label->setFont( osgText::readFontFile( "simhei.ttf" ) )
label->setFontSize( 24.0f )
label->setHorizAlign( Control::ALIGN_LEFT )
label->setText("点击并测量")
grid->setControl( 1, 0, label )
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)