|
#include<osgViewer/Viewer>
#include<osg/Node>
#include<osg/Geode>
#include<osg/Group>
#include<osgDB/ReadFile>
#include<osgDB/WriteFile>
#include<osgText/Text>
#include<osgText/Font>
#include<iostream>
#include<fstream>
#include<istream>
#include<osgUtil/Optimizer>
//创建文字
osg::ref_ptr<osg::Geode>createText()
{
osg::ref_ptr<osgText::Text>text = new osgText::Text;
osg::ref_ptr<osgText::Font>font = new osgText::Font();
//读取字体
font = osgText::readFontFile("/fonts/simhei.ttf");
//设置字体文件
text->setFont(font.get());
//设置文字信息
text->setText(L"http://osgChina.社区");
//设置字体大小
text->setCharacterSize(0.5f);
text->setAutoRotateToScreen(true);
//设置字体颜色
text->setColor(osg::Vec4(1.0f,0.0f,0.0f,1.0f));
//设置显示的位置
osg::Vec3f position = osg::Vec3f(0.0f,-10.0f,0.0f);
text->setPosition(position);
//设置对齐方式
text->setAlignment(osgText::Text::CENTER_TOP);
//设置旋转方式
text->setAxisAlignment(osgText::Text::SCREEN);
//添加到叶节点中
osg::ref_ptr<osg::Geode>geode = new osg::Geode();
geode->addDrawable(text.get());
return geode.get();
}
void main()
{
//创建Viewer对象,场景游览器
osg::ref_ptr<osgViewer::Viewer>viewer = new osgViewer::Viewer();
// 创建场景组节点
osg::ref_ptr<osg::Group>root = new osg::Group();
//创建文字
osg::ref_ptr<osg::Node>node = createText();
// 添加到场景
root->addChild(node.get());
// 优化场景数据
osgUtil::Optimizer optimizer;
optimizer.optimize(root.get());
// 设置场景数据
viewer->setSceneData(root.get());
// 初始化并创建窗口
viewer->realize();
// 开始渲染
viewer->run();
}
这是我的代码,就是书上的例子,我自己在网上下载了一个simhei.ttf字体,然后在工程中建了一个fonts文件夹,然后把字体放入了。程序可以运行,但是屏幕上就是什么都不显示,我以为是有中文的原因,然后我把字体换成了C:\\OSG\\data\\fonts\\times.ttf,文字的内容换成了全英文,然后运行还是什么也没有显示。我是vs2010,osg3.0。然后osgdb_freetype.dll等内容都是全的。
请高手帮助一下,十分感谢!! |
|