本节功能
在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
暂无评论内容