osg如何显示文字

osg如何显示文字,第1张

//textObject.setCharacterSizeMode(osgText::Text::SCREEN_COORDS)//跟随视角不断变化,离物体越远文字越大textObject.setAutoRotateToScreen(true)//跟随视角不断变化,但离物体越远,文字越小,和现实当中像类似

注意:

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 )


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/7861067.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-10
下一篇 2023-04-10

发表评论

登录后才能评论

评论列表(0条)

保存