转自:http://www.cnblogs.com/feixiang-peng/articles/3152754.html

写好了在osg中实时显示中文信息的效果。中间遇到两个问题,一个是
中文显示,一个是动态显示。在这过程中会出现程序崩溃的现象,相信做过的人肯定深有体会。其实解决的
办法很简单,就是再添加两行代码。一行:setlocale(LC_ALL,".936");是配置中文显示地域化信息,二行:
hudText->setDataVariance(osg::Object::DYNAMIC);是为了动态更新时候不出现程序崩溃。

void setupProperties(osgText::Text& textObject,osgText::Font* font,float size,const osg::Vec3& pos )
{
    textObject.setFont(font);//
 
    textObject.setCharacterSize(size);//字体大小
    textObject.setPosition(pos);
    textObject.setColor(osg::Vec4(0.0,1.0,0.0,1.0));
    textObject.setAlignment(osgText::Text::CENTER_BOTTOM);//文字显示方向
    //textObject.setAxisAlignment(osgText::Text::SCREEN);//获取文字对称成方式正对屏幕方向
    //textObject.setCharacterSizeMode(osgText::Text::SCREEN_COORDS);//跟随视角不断变化,离物体越远,文字越大
    textObject.setAutoRotateToScreen(false);//跟随视角不断变化,但离物体越远,文字越小,和现实当中像类似
    textObject.setBackdropType(osgText::Text::OUTLINE);//对文字进行描边
    textObject.setBackdropColor(osg::Vec4(1.0,1.0,0.0,1.0));//描边颜色
    textObject.setDrawMode(osgText::Text::TEXT | osgText::Text::BOUNDINGBOX);//添加文字边框       textObject.setAxisAlignment(osgText::Text::XZ_PLANE);//获取文字对称成方式
 
}
 
void createContent(osgText::Text& textObject,const char* string)
{
    int requiredSize=mbstowcs(NULL,string,0);//如果mbstowcs第一参数为NULL那么返回字符串的数目
    wchar_t* wText=new wchar_t[requiredSize+1];
    mbstowcs(wText,string,requiredSize+1);//由char转换成wchar类型
    textObject.setText(wText);
    delete wText;
}
 
osg::ref_ptr<osg::Group> ShowDynamicTexts()
{
    setlocale(LC_ALL,".936");// 配置地域化信息
    const char* titleString="时间";
    osg::Group* rootNode = new osg::Group;
    osg::Geode* geode  = new osg::Geode;
    rootNode->addChild(geode);   
    {
        titleTime=new osgText::Text;
        m_arialFont = osgText::readFontFile("fonts/simkai.ttf");
        titleTime->setDataVariance(osg::Object::DYNAMIC);
        setupProperties(*titleTime,m_arialFont,30.0f,osg::Vec3(200,1140,0.0f));
        createContent(*titleTime,titleString);  
        geode->addDrawable(titleTime.get());
    }          
    return rootNode;   
}
 
void RefreshTimeText(string textString)
{
    setlocale(LC_ALL,".936");// 配置地域化信息
    createContent(*titleTime,textString.data());
}

[osg]osg显示中文信息的更多相关文章

  1. OSG和osgearth显示中文(转载)

    osgEarth支持中文过程详解 OSG和osgearth显示中文 一.知识储备   要想很好的理解和解决这个问题,首先要了解什么是多字节和宽字节.说实话我之前也知道这两个字节到底有什么区别,只是简单 ...

  2. 使AspNetPager控件中文显示分页信息

    在日常的编程过程中,很多学员对于使AspNetPager控件中文显示分页信息不是很清楚,本文将由达内的老师为各位学员介绍一下使AspNetPager控件中文显示分页信息的内容. AspNetPager ...

  3. [osg]osg窗口显示和单屏幕显示

    osg::ref_ptr<osg::Node> loadedModel = osgDB::readNodeFile("cow.osg"); osg::ref_ptr&l ...

  4. ios调用系统相册、相机 显示中文标题、本地化多语言支持

    因为调用系统相册.相机需要显示中文,所以搞了半天才知道是在Project->info->Custom ios Target Properties 添加 Localizations 并加入C ...

  5. 转:jsp页面显示中文乱码解决方案

    jsp页面显示中文乱码: jsp页面的编码方式有两个地方需要设置: <%@ page language="java" import="java.util.*&quo ...

  6. ZPL打印中文信息

    博客来源:http://www.cnblogs.com/Geton/p/3595312.html 相信各位在实际的项目中,需要开发打条码模块的也会有不少,很多同行肯定也一直觉得斑马打印机很不错,但是Z ...

  7. AngularJS 表单提交后显示验证信息与失焦后显示验证信息

    虽然说AngularJS的实时表单验证非常有用,非常高效方便,但是当用户还没有完成输入时便弹出一个错误提示,这种体验是非常糟糕的. 正常的表单验证逻辑应该是在用户提交表单后或完成当前字段中的输入后,再 ...

  8. RoportNG报表显示中文乱码和TestNG显示中文乱码实力解决办法

    最近在进军测试自动化框架学习阶段,但无意间总是会伴随小问题的困扰,比如中文乱码,而导致显示总是不舒服,个人觉得,就一定要解决,似乎有点点强迫症.所以遇到RoportNG报表显示中文乱码和TestNG显 ...

  9. blfs(systemd版本)学习笔记-配置远程连接显示中文

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 远程连接的lfs系统需要具备以下环境便可在xshell或其他远程终端上面显示中文: 1.lfs主机设置中文编码(需要配置) 2. ...

随机推荐

  1. MFC设置窗体大小SetWindowPos

    SetWindowPos(NULL,0,0,200,300,SWP_NOMOVE); 表示不考虑(0,0),仅仅将大小改为200x300,位置不变    SetWindowPos(NULL,0,0,2 ...

  2. 把Wordpress集成到zen-cart里方法 各种修改 经典机制

    作者: 闻庭牛 | 分类: zen cart插件精解 | 浏览: 4 | 评论: 暂时没有评论 如果你的Zen-cart需要一个Blog来发布一些你的最新动态,可以试试Wordpress,并且用WOZ ...

  3. 使用nginx简单实现负载均衡

    只是简单使用nginx玩玩而已,知道能这么用,但是在实际项目中并没有实践过,在项目不大的时候用不到,但是对于理解负载均衡来说还是可以的. 利用虚拟机安装了三个centOS系统,然后顺便装了环境. 这里 ...

  4. AJAX(XMLHttpRequest)进行跨域请求方法详解(二)

    注意:以下代码请在Firefox 3.5.Chrome 3.0.Safari 4之后的版本中进行测试.IE8的实现方法与其他浏览不同. 2,预检请求 预检请求首先需要向另外一个域名的资源发送一个 HT ...

  5. ubuntu下如何安装及使用 pysvn-workbench

    网上对于 pysvn-workbench 的教程几乎没有,没办法,只好去官网自学了,现在能正常上传资料了,写点东西,以免今后忘了 安装方面:在新立得中查找svn-workbench,subversio ...

  6. C#入门经典第十章接口的实现

  7. (转)StringTokenizer类的使用

    StringTokenizer是一个用来分隔String的应用类,相当于VB的split函数.1.构造函数public StringTokenizer(String str)public String ...

  8. 挂载了Cinder Volume的实例无法动态迁移排错

    现象:挂载了Cinder Volume的实例无法动态迁移 [root@node-5 nova]# tail -f compute.log 2016-01-13 16:36:12.870 18762 E ...

  9. 利用cookie实现“只弹出一次窗口”的JS代码

    弹出式窗口通常被用来做弹出广告(CPM),其实用弹出式窗口用来做消息通知也是最普遍而且是最有效的方法,但如果每次刷新页面特别是刷新首页都要弹出窗口的话,那绝对是让访问者厌烦的事情. 比如你将上面的脚本 ...

  10. kindeditor集成ckplayer(带右键编辑菜单)

    相信好多朋友为开源web编辑器没有集成视频播放器而烦恼,于是我就是试着修改了一下kindeditor,其实ueditor应该也是同样的,好了不多说了直接上图吧 kindeditor版本: 4.1.7  ...