第35节 实例-显示中文

本节功能

在osg中显示中文:
在这里插入图片描述

本节的内容在网盘中,目录为/osgChina站长文集/文件中的附件/, 有附件的会根据节的编号存放在该目录:

请使用浏览器打开,平时遇到问题或加群也可以加我微信:13324598743:
【击此打开网盘资源链接】

本节实现

  • 字体首先要设置成中文,下面设置成黑体:
    osgText::Text* text1 = new osgText::Text;
    text1->setFont("fonts/simhei.ttf");

windows携带的字体都在C:\\Windows\\Fonts目录下,对着想要使用的字体右键->属性,可以得到字体文件名:
在这里插入图片描述
你也可以将字体拷到任意的文件夹中,也显示自然的显示其文件名。

  • 其次就是文字是宽字符,需要使用宽字符设置即可:
text1->setText(L"中国");

前面使用L代表引号中的内容使用宽字符(wchar_t)进行存储,同时setText也有针对wchar_t的重载。就这两步就可以了。

PS:
有没有发现osg的字体渲染出来边有点虚:
在这里插入图片描述
是的,你没有猜错,字体渲染乃是图形学界最难的事情之一,这也就是每一代的iphone发布,乔布斯针对苹果的字体渲染都要吹半天牛B的原因。

我司针对osg使用freetype进行栅格化的方案导致发虚的问题进行了深刻的研究,确保了不虚:
在这里插入图片描述
要公开?
这可是我们公司费了劲的核心技术呀,得加钱。

也欢迎大家在字体渲染方面有研究的同志们,可以秀一秀。

本节全部代码

#include <osgViewer/Viewer>
#include <osg/Geode>
#include <osg/ShapeDrawable>
#include <osgText/Font>
#include <osgText/Text>
#include <osgDB/ReadFile>

int main()
{
    osgViewer::Viewer viewer;

    osg::Group* root = new osg::Group;

    osg::Geode* geode = new osg::Geode;
    root->addChild(geode);
    osgText::Text* text1 = new osgText::Text;
    text1->setFont("fonts/simhei.ttf");
    text1->setCharacterSize(100.0);
    text1->setPosition(osg::Vec3(0.0, 0.0, 0.0));
    text1->setAxisAlignment(osgText::Text::SCREEN);
    text1->setCharacterSizeMode(osgText::Text::SCREEN_COORDS);
    text1->setText(L"中国");
    geode->addDrawable(text1);

    viewer.setSceneData(root);

    return viewer.run();
}

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片