查看: 1042|回复: 1

osgText显示为乱码?

[复制链接]

该用户从未签到

发表于 2014-3-25 13:44:54 | 显示全部楼层 |阅读模式
比如CString str="d中国";
std::String name=str.getBuffer(0);
后给osgText显示为乱码
还有就是 获取osgText文字后如何转化为CString?

该用户从未签到

发表于 2014-3-25 17:20:28 | 显示全部楼层
请参考如下代码:
osg::ref_ptr<osg::Geode> geode  = new osg::Geode;

        float characterSize=800;//radius*0.2f;
        float characterDepth=characterSize*0.2f;
        setlocale(LC_ALL,".936");
        //osg::Vec3 pos(center.x(),center.y(),center.z());

        osgText::Text3D* text1 = new osgText::Text3D;
        text1->setFont("fonts/simhei.ttf");
        text1->setCharacterSize(characterSize);
        text1->setCharacterDepth(characterDepth);
        //text1->setPosition(pos);  在显示3D文字,程序运行第一次时设置位置是正确的,第二次后所有位置都在坐标系原点,造成显示重叠,显示位置不对
        text1->setDrawMode(osgText::Text3D::TEXT | osgText::Text3D::BOUNDINGBOX);
        text1->setAxisAlignment(osgText::Text3D::XZ_PLANE);
        //text1->setRenderMode(osgText::Text3D:ER_GLYPH);
        int resize=mbstowcs(NULL,txt,0);
        wchar_t* wtext=new wchar_t[resize+1];
        mbstowcs(wtext,txt,resize+1);
        text1->setText(wtext);
        geode->addDrawable(text1);
       
        osg::ref_ptr<osg::Group> rootNode = new osg::Group;
        rootNode->addChild(geode);
        delete wtext;
        osg::Material* front = new osg::Material;
        front->setAlpha(osg::Material::FRONT_AND_BACK,1);
        front->setAmbient(osg::Material::FRONT_AND_BACK,osg::Vec4(0.2,0.2,0.2,1.0));
        front->setDiffuse(osg::Material::FRONT_AND_BACK,osg::Vec4(0.0,0.0,1.0,1.0));
        rootNode->getOrCreateStateSet()->setAttributeAndModes(front);

        return rootNode.release();   

另外将项目的字符集设为多字节字符集
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表