initqtwindowingsystem;中不能使用osgtext吗

 我来答
好口子
2017-01-08 · 好口子,手把手教你维护好你的征信!
好口子
采纳数:29399 获赞数:66630

向TA提问 私信TA
展开全部

注意:

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.效果图如下:

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式