/**********************************************************
*Write by FlySky
*zzuxp@163.com http://www.OsgChina.org
**********************************************************/ #include <osgViewer/Viewer> #include <osg/Node>
#include <osg/Geometry>
#include <osg/Geode>
#include <osg/Group>
#include <osg/AutoTransform> #include <osgDB/ReadFile>
#include <osgDB/WriteFile> #include <osgText/Text> #include <osgUtil/Optimizer> #include <iostream> //创建自动变换节点
osg::ref_ptr<osg::Node> createAutoTransform(osg::Vec3& position, float size, std::string& label,
osg::AutoTransform::AutoRotateMode autoMode, osgText::Text::AxisAlignment axisAlignment)
{
osg::ref_ptr<osg::Geode> geode = new osg::Geode(); //字体
std::string font("fonts/cour.ttf"); //创建Text对象
osg::ref_ptr<osgText::Text> text = new osgText::Text();
geode->addDrawable(text.get()); //设置字体
text->setFont(font);
//设置字体的分辨率,默认为32*32
text->setFontResolution(128.0f, 128.0f);
//设置字体的大小
text->setCharacterSize(size);
//设置对齐方式
text->setAlignment(osgText::Text::CENTER_CENTER);
//设置方向
text->setAxisAlignment(axisAlignment);
//设置文字
text->setText(label); //关闭光照
geode->getOrCreateStateSet()->setMode(GL_LIGHTING, osg::StateAttribute::OFF); //创建自动变换节点
osg::ref_ptr<osg::AutoTransform> at = new osg::AutoTransform();
//添加子节点
at->addChild(geode.get()); //设置自动变换方式
at->setAutoRotateMode(autoMode);
//根据屏幕大小来缩放节点,默认为false,设置为true时,节点无法缩放
at->setAutoScaleToScreen(false);
//at->setAutoScaleToScreen(true) ;
//设置缩放的最大和最小比例
at->setMinimumScale(0.0f);
at->setMaximumScale(5.0f);
//设置位置
at->setPosition(position); return at.get();
}
int main()
{
osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer(); osg::ref_ptr<osg::Group> root = new osg::Group(); std::string text("Fly To Sky"); /*
三种变换模式:
ROTATE_TO_SCREEN  自动朝向屏幕
ROTATE_TO_CAMERA 自动朝向相机
NO_ROTATION 无
*/
//添加ROTATE_TO_SCEREEN模式变换节点
root->addChild(createAutoTransform(osg::Vec3(0.0f, 0.0f, 0.0f), 60.0f, text,
osg::AutoTransform::ROTATE_TO_SCREEN, osgText::Text::XY_PLANE)); //添加NO_ROTATION模式变换节点
root->addChild(createAutoTransform(osg::Vec3(0.0f, 0.0f, 0.0f), 60.0f, text,
osg::AutoTransform::NO_ROTATION, osgText::Text::YZ_PLANE)); //添加ROTATE_TO_CAMERA模式变换节点
//root->addChild(createAutoTransform(osg::Vec3(0.0f,0.0f,0.0f),60.0f,text,
// osg::AutoTransform::ROTATE_TO_CAMERA,osgText::Text::XY_PLANE)) ; //优化场景数据
osgUtil::Optimizer optimizer;
optimizer.optimize(root.get()); viewer->setSceneData(root.get()); viewer->realize(); viewer->run(); return 0;
}

OSG学习:自动对齐节点示例的更多相关文章

  1. OSG学习:矩阵变换节点示例

    #include<osgViewer\Viewer> #include<osg\Node> #include<osg\Geode> #include<osg\ ...

  2. osg学习示例之遇到问题四骨骼动画编译osgCal

    osg学习示例之遇到问题四骨骼动画编译osgCal 转自:http://blog.csdn.net/wuwangrun/article/details/8239451 今天学到书<OpenSce ...

  3. 【原创】SpringBoot & SpringCloud 快速入门学习笔记(完整示例)

    [原创]SpringBoot & SpringCloud 快速入门学习笔记(完整示例) 1月前在系统的学习SpringBoot和SpringCloud,同时整理了快速入门示例,方便能针对每个知 ...

  4. OSG学习:位置变换节点示例

    osg::PositionAttitudeTransform节点. #include <osgViewer\Viewer> #include <osg\Node> #inclu ...

  5. OSG学习:阴影代码示例

    效果图: 代码示例: #include <osgViewer/Viewer> #include <osg/Node> #include <osg/Geode> #i ...

  6. OSG学习:响应键盘鼠标示例

    示例功能:示例里面有两个模型,一个是牛,另一个是飞机.鼠标右键时牛和飞机都隐藏,鼠标左键双击时牛和飞机都显示,按键盘上面的LEFT键,显示牛,按键盘上面的RIGHT键显示飞机.其中显示与隐藏节点使用的 ...

  7. OSG学习:转动的小汽车示例

    由于只是简单的示例,所以小汽车的模型也比较简单,是由简单的几何体组成. 代码如下: #include <osg\ShapeDrawable> #include <osg\Animat ...

  8. OSG学习:使用已有回调示例

    回调的类型有很多种,一般很容易就想到的是UpdateCallBack,或者EventCallBack,回调的意思就是说,你可以规定在某件事情发生时启动一个函数,这个函数可能做一些事情.这个函数就叫做回 ...

  9. OSG学习:基本几何体绘制示例

    绘制并渲染几何体主要有如下3大步骤: 1.创建各种向量数据,如顶点.纹理坐标.颜色和法线等.需要注意的是,添加顶点数据时主要按照逆时针顺序添加, 以确保背面剔除的正确. 2.实例化一个几何体对象(os ...

随机推荐

  1. Python学习5——基本格式化输出

    整数的格式化输出 十进制.八进制.十六进制 num01 = 100 print("十进制输出:%d"%num01) print("八进制输出:%o"%num01 ...

  2. Learning notes | Data Analysis: 1.2 data wrangling

    | Data Wrangling | # Sort all the data into one file files = ['BeijingPM20100101_20151231.csv','Chen ...

  3. java 优化版 用接口实现(输入两个数选择实现加减乘除运算)

    //利用java接口实现计算器,实现加减乘除的功能 import java.util.Scanner; class Test { public static void main(String[] ar ...

  4. 008---vim编辑器

    vim 编辑器 三个模式 三个模式之间切换 图 命令模式进入编辑模式 A:行末 a:向后 i:向前 I:行首 o:向上 O:向下 命令模式 复制 yy:复制光标所在行 4yy:向下复制四行 剪切(删除 ...

  5. PWA-网络

    PWA-网络 fetch API Get fetch('/some/url',{ method:'GET' }).then(function(resp){ //success }).catch(fun ...

  6. Educational Codeforces Round 46 (Rated for Div. 2) D. Yet Another Problem On a Subsequence

    这个题是dp, dp[i]代表以i开始的符合要求的字符串数 j是我们列举出的i之后一个字符串的开始地址,这里的C是组合数 dp[i] += C(j - i - 1, A[i]] )* dp[j]; # ...

  7. 3329: Xorequ

    3329: Xorequ https://www.lydsy.com/JudgeOnline/problem.php?id=3329 分析: 因为a+b = a^b + ((a&b)<& ...

  8. WeTest功能优化第2期:云真机智能投屏,调试告别鼠标

    第2期功能优化目录 [云真机视频映射]云真机画面本地映射[兼容性测试报告]新增问题机型聚类功能[新增Android9.0]同步上线最新安卓系统 本期介绍的云测产品功能优化,既有重磅级技术突破,也有报告 ...

  9. Qt 解析EXcel文件

    写代码需要将excel中的文件导入到数据库中 网上找到以为大神写的,但是当初没有保存,也没有找到 我几乎是原分不动拔下来的,希望大神莫怪 void AddDialog::readExcel(QStri ...

  10. 怎样下载JDBC驱动

    MySQL官网: https://www.mysql.com/ 请注意: 需要把mysql-connector-java-5.1.45-bin.jar放到C:\JMeter\apache-jmeter ...