实现思路

osgText::Text中没有找到文字倾斜的设置项(osg版本为3.0.1)。所以换了个思路,使用矩阵来对文字进行错切,即可达到文字倾斜的效果。

错切

OSG笔记:OSG实现文字倾斜_Text


OSG笔记:OSG实现文字倾斜_osg文字倾斜_02


OSG笔记:OSG实现文字倾斜_中文支持_03

示例代码

osg::ref_ptr<osg::Group> pRoot = new osg::Group();

osg::ref_ptr<osg::Geode> pTextGeode = new osg::Geode();
pRoot->addChild(pTextGeode);
for (int i = 0; i < 5; ++i)
{
osgText::Text* pText = new osgText::Text();
pText->setFont("simfang.ttf");
pText->setFontResolution(256, 256);//字体分辨率,值越大越清晰
pText->setText(L"中文支持");
pText->setPosition(osg::Vec3(0, i*400, 0));
pText->setCharacterSize(300, 1.0 );
pTextGeode->addDrawable(pText);
}


//文字倾斜
for (int i = 0; i < 5; ++i)
{
osg::MatrixTransform* pObliqueMatrix = new osg::MatrixTransform(
osg::Matrix(
1, 0, 0, 0,
1, 1, 0, 0,
0, 0, 1, 0,
-400*(i+1), 0, 0, 1));
pRoot->addChild(pObliqueMatrix);
osg::ref_ptr<osg::Geode> pTextObliqueGeode = new osg::Geode();
pObliqueMatrix->addChild(pTextObliqueGeode);

osgText::Text* pText = new osgText::Text();
pText->setFont("simfang.ttf");
pText->setFontResolution(256, 256);//字体分辨率,值越大越清晰
pText->setText(L"中文支持");
pText->setPosition(osg::Vec3(2500, i * 400, 0));
pText->setCharacterSize(300, 1.0);
pTextObliqueGeode->addDrawable(pText);
}

运行结果

OSG笔记:OSG实现文字倾斜_osg文字倾斜_04