/**********************************************************
*Write by FlySky
*zzuxp@163.com http://www.OsgChina.org
**********************************************************/ #include <osgViewer/Viewer> #include <osg/Node>
#include <osg/Geometry>
#include <osg/Geode>
#include <osg/Group>
#include <osg/AutoTransform> #include <osgDB/ReadFile>
#include <osgDB/WriteFile> #include <osgText/Text> #include <osgUtil/Optimizer> #include <iostream> //创建自动变换节点
osg::ref_ptr<osg::Node> createAutoTransform(osg::Vec3& position, float size, std::string& label,
osg::AutoTransform::AutoRotateMode autoMode, osgText::Text::AxisAlignment axisAlignment)
{
osg::ref_ptr<osg::Geode> geode = new osg::Geode(); //字体
std::string font("fonts/cour.ttf"); //创建Text对象
osg::ref_ptr<osgText::Text> text = new osgText::Text();
geode->addDrawable(text.get()); //设置字体
text->setFont(font);
//设置字体的分辨率,默认为32*32
text->setFontResolution(128.0f, 128.0f);
//设置字体的大小
text->setCharacterSize(size);
//设置对齐方式
text->setAlignment(osgText::Text::CENTER_CENTER);
//设置方向
text->setAxisAlignment(axisAlignment);
//设置文字
text->setText(label); //关闭光照
geode->getOrCreateStateSet()->setMode(GL_LIGHTING, osg::StateAttribute::OFF); //创建自动变换节点
osg::ref_ptr<osg::AutoTransform> at = new osg::AutoTransform();
//添加子节点
at->addChild(geode.get()); //设置自动变换方式
at->setAutoRotateMode(autoMode);
//根据屏幕大小来缩放节点,默认为false,设置为true时,节点无法缩放
at->setAutoScaleToScreen(false);
//at->setAutoScaleToScreen(true) ;
//设置缩放的最大和最小比例
at->setMinimumScale(0.0f);
at->setMaximumScale(5.0f);
//设置位置
at->setPosition(position); return at.get();
}
int main()
{
osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer(); osg::ref_ptr<osg::Group> root = new osg::Group(); std::string text("Fly To Sky"); /*
三种变换模式:
ROTATE_TO_SCREEN  自动朝向屏幕
ROTATE_TO_CAMERA 自动朝向相机
NO_ROTATION 无
*/
//添加ROTATE_TO_SCEREEN模式变换节点
root->addChild(createAutoTransform(osg::Vec3(0.0f, 0.0f, 0.0f), 60.0f, text,
osg::AutoTransform::ROTATE_TO_SCREEN, osgText::Text::XY_PLANE)); //添加NO_ROTATION模式变换节点
root->addChild(createAutoTransform(osg::Vec3(0.0f, 0.0f, 0.0f), 60.0f, text,
osg::AutoTransform::NO_ROTATION, osgText::Text::YZ_PLANE)); //添加ROTATE_TO_CAMERA模式变换节点
//root->addChild(createAutoTransform(osg::Vec3(0.0f,0.0f,0.0f),60.0f,text,
// osg::AutoTransform::ROTATE_TO_CAMERA,osgText::Text::XY_PLANE)) ; //优化场景数据
osgUtil::Optimizer optimizer;
optimizer.optimize(root.get()); viewer->setSceneData(root.get()); viewer->realize(); viewer->run(); return 0;
}

最新文章

  1. oracle忘记sys/system/scott用户密码了,如何重置oracle密码?
  2. Install latest R for ubuntu
  3. Struts2应用的开发流程
  4. Zookeeper简介与安装
  5. Linux 使用yum工具
  6. myeclipse配置weblogicserver
  7. VC/MFC ListCtrl 控件功能使用汇总(转)
  8. iframe自适应高度处理方案
  9. HDU 1155 Bungee Jumping 物理
  10. 队列工厂之RedisMQ
  11. Vue Elementui 如何让输入框每次自动聚焦
  12. SQA计划与系统测试
  13. Polar Code(1)关于Polar Code
  14. Vue todolist练习 知识点
  15. [TensorFlow] Introducing TensorFlow Feature Columns
  16. JS client(X,Y)、screen(X,Y)、page(X,Y)的区别
  17. python 爬虫数据准换时间格式
  18. Win7 发生验证错误 要求的函数不受支持
  19. SGA内存的优化
  20. 前端工业化工具Grunt初体验

热门文章

  1. Linux awk基础笔记
  2. PHP基础4--函数-数组
  3. Python 爬虫 七夕福利
  4. Hibernate学习笔记一
  5. 成都Uber优步司机奖励政策(3月3日)
  6. ORB-SLAM(十)LoopClosing
  7. rsync同步的艺术
  8. 「日常训练&amp;知识学习」单调栈
  9. 「专题训练」Air Raid(HDU-1151)
  10. Unity编辑器 - 资源批处理工具基类