前言
在 osg 中,osgText 组件负责所有文字渲染细节,不仅支持设置字体、颜色、尺寸和位置,还允许配置字符大小模式与自动朝向屏幕旋转等高级特性,以实现丰富的文字显示效果。
目录
- 1 osg绘制文字示例
- 2 osgText类图
正文
1 osg绘制文字示例
cpp
#include <osgViewer/Viewer>
#include <osgText/Text>
#include <osgText/Text3D>
#include <osgGA/TerrainManipulator>
#include <osgViewer/ViewerEventHandlers>
int main(int argc, char** argv)
{
osgViewer::Viewer viewer;
viewer.setCameraManipulator(new osgGA::TerrainManipulator());
viewer.addEventHandler(new osgViewer::ScreenCaptureHandler);
osg::ref_ptr<osgText::Text3D> text = new osgText::Text3D;
text->setText("TextTest");
text->setFont("fonts/arial.ttf");
text->setColor(osg::Vec4(0.0, 1.0, 1.0, 1.0));
text->setCharacterSize(20);
text->setPosition(osg::Vec3(0.0, 0.0, 0.0));
osg::ref_ptr<osg::Geode> geode = new osg::Geode;
geode->addDrawable(text);
viewer.setSceneData(geode);
return viewer.run();
}
如上代码为osgText::Text使用代码,通过setText方法设置文字内容、setFont方法设置文字字体、setColor设置文字颜色、setCharacterSize设置位子大小(高度)、setPositon设置文字位置。将osgText::Text替换为osgText::Text3D可显示三维文字。显示效果如下:
|----------------------------------------------------------------------------|----------------------------------------------------------------------------|
|
|
|
| 二维文字 | 三维文字 |
其中三维文字相比二维文字轮廓更清晰,从原理上二维文字采用QUAD贴图方案会随着放大而逐渐模糊,而三维文字是纯矢量方案,文字通过三角网构成,无论怎样缩放其轮廓仍然清晰。
同时三维文字的显示需依赖设置的字体,当设置的字体导入失败时,则三维文字不显示,字体文件ttf的加载依赖osgDB_freetype插件,在编译osg库时需设置freetype三方库。

2 osgText类图
osgText::Text和osgText::Text3D是osgText::TextBase的两个不同子类,上节中设置文字内容、字体、颜色、大小、位置均为osgText::TextBase的方法。osgText::TextBase内置了些高级方法setCharacterSizeMode、setAutoRotateToScreen用于设置文字大小模式与是否自动朝向屏幕旋转。