OSG中的HUD

所谓HUD节点,说白了就是无论三维场景中的内容怎么改变,它都能在屏幕上固定位置显示的节点。

实现要点:
  • 关闭光照,不受场景光照影响,所有内容以同一亮度显示
  • 关闭深度测试
  • 调整渲染顺序,使它的内容最后绘制
  • 设定参考贴为绝对型:setReferenceFrame(osg::Transform:ABSOLUTE_RF)
  • 使其不受父节点变换的影响:setMatrix(osg::Matrix::identity())
  • 使用平行投影,设定虚拟投影窗口的大小,这个窗口的大小决定了后面绘制的图形和文字的尺度比例
示例代码:
       //
创建
HUD
摄像机
      
osg
::
ref_ptr
<
osg
::
Camera
>
camera
=
new
osg
::
Camera
;
      
camera
->
setProjectionMatrix
(
osg
::
Matrix
::
ortho2D
(0, 1000, 0, 1000));
//
表示摄像机里的平面世界有多大
      
camera
->
setReferenceFrame
(
osg
::
Transform
::
ABSOLUTE_RF
);
      
camera
->
setViewMatrix
(
osg
::
Matrix
::
identity
());
      
camera
->
setClearMask
(
GL_DEPTH_BUFFER_BIT
);
      
camera
->
setAllowEventFocus
(
false
);
      
camera
->
setRenderOrder
(
osg
::
Camera
::
POST_RENDER
);
      
//
创建提示对象
      
m_prompt
=
new
osgText
::
Text
;
      
QFont
f
(
"
宋体
"
);
      
osgText
::
Font
*
font
=
new
osgText
::
Font
(
new
osgQt
::
QFontImplementation
(
f
));
      
m_prompt
->
setFont
(
font
);
      
m_prompt
->
setCharacterSize
(16);
      
m_prompt
->
setPosition
(
osg
::
Vec3
(0.0f, 10.0f, 0.0f));
      
m_prompt
->
setColor
(
osg
::
Vec4
(1, 1, 1, 1));
      
m_prompt
->
setDataVariance
(
osg
::
Object
::
DYNAMIC
);
      
m_prompt
->
setText
(
_conv
(
"
坐标
"
),
osgText
::
String
::
ENCODING_UTF8
);
      
osg
::
ref_ptr
<
osg
::
Geode
>
geode
=
new
osg
::
Geode
;
      
geode
->
addDrawable
(
m_prompt
);
      
osg
::
ref_ptr
<
osg
::
StateSet
>
stateSet
=
geode
->
getOrCreateStateSet
();
      
stateSet
->
setMode
(
GL_LIGHTING
,
osg
::
StateAttribute
::
OFF
);
      
stateSet
->
setMode
(
GL_DEPTH_TEST
,
osg
::
StateAttribute
::
OFF
);
      
stateSet
->
setMode
(
GL_BLEND
,
osg
::
StateAttribute
::
ON
);
      
camera
->
addChild
(
geode
);
 
       // 添加到场景里
       viewer->getSceneData()->asGroup()->addChild(camera);

OSG中的HUD的更多相关文章

  1. OSG中找到特定节点的方法

    OSG中找到特定节点的方法 转自:http://38288890.blog.163.com/blog/static/19612845320072721549504/ 为了在OSG中找到需要的节点并对节 ...

  2. osg中遇到的问题

    osg中遇到的问题 今天写程序的时候, 需要把键盘和鼠标消息转发出来, 就直接写了接口用signal丢出来了. 程序写的很多, 测试的时候却崩溃了.... 在场景中拖拽鼠标左键的时候, 会发现在扔出鼠 ...

  3. osg中的视点控制

    osg中的视点控制 osg的视点控制基类是CameraManipulator, 它是一个虚基类, 有用的方法都跟home有关. 在这个类里面有三个重要的成员变量: osg::Vec3d _homeEy ...

  4. osg中使用MatrixTransform来实现模型的平移/旋转/缩放

    osg中使用MatrixTransform来实现模型的平移/旋转/缩放 转自:http://www.cnblogs.com/kekec/archive/2011/08/15/2139893.html# ...

  5. OSG中的示例程序简介

    OSG中的示例程序简介 转自:http://www.cnblogs.com/indif/archive/2011/05/13/2045136.html 1.example_osganimate一)演示 ...

  6. OSG中找到特定节点的方法(转)

    OSG中找到特定节点的方法 为了在OSG中找到需要的节点并对节点做出相应的操作,可以从NodeVisitor类中继承一个类,NPS的教程 [download id="14"] 阐述 ...

  7. OSG中的示例程序简介(转)

    OSG中的示例程序简介 1.example_osganimate一)演示了路径动画的使用 (AnimationPath.AnimationPathCallback),路径动画回调可以作用在Camera ...

  8. OSG中相机参数的更改

    #pragma comment(lib, "osg.lib") #pragma comment(lib, "osgDB.lib") #pragma commen ...

  9. osg项目经验1<MFC+OSG中模型点选效果>

    点选主要是重载osg的GUIEventHandler, class CPickHandler : public osgGA::GUIEventHandler{ //自定义回调函数名:CPickHand ...

随机推荐

  1. 【PHP&&MySQL详解】

    PHP和MySQL是一对好搭档,PHP中有一个很大的扩展库专门针对对MySQL的操作.当然,作为一个PHP程序员,首先对MySQL的增删查改要非常熟悉才行. MySQL数据库的连接数大概在6w个左右, ...

  2. ereg/eregi报错处理办法

    ereg()函数和eregi()函数用法相同,不同之处在与ereg()区分大小写,eregi()不区分大小写 在php5.3以上的版本将不再支持eregi()和ereg()函数 处理办法: 正则函数处 ...

  3. WPF之MVVM(Step2)——自己实现DelegateCommand:ICommand

    在自己实现MVVM时,上一篇的实现方式基本是不用,因其对于命令的处理不够方便,没写一个命令都需要另加一个Command的类.此篇主要介绍DelegateCommand来解决上面所遇到的问题. 首先,我 ...

  4. 第二十四篇:导出SOUI对象到LUA脚本

    LUA是一种体积小,速度快的脚本语言.脚本语言虽然性能上和C++这样的Naitive语言相比差一点,但是开发速度快,可以方便的更新代码等,近年来受到了越来越多开发者的重视. 在SOUI框架中,我把脚本 ...

  5. VIM学习笔记

    参考: http://linux.chinaunix.net/techdoc/beginner/2009/12/20/1150108.shtml VIM命令大全 光标控制命令 命令           ...

  6. Linux学习笔记(10)文本编辑器vim

    vim是一个功能强大的全屏幕文本编辑器,是Linux/Unix最常用的文本编辑器,其作用是建立.编辑.显示文本文件.vim的特点是没有菜单,只有命令. vim主要有三种工作模式,分别为命令模式.插入模 ...

  7. OpenGL大作业

    GLfloat light0_position[] = { 15.0,15.0,15.0,10.0 };//定义光源位置 103glLightfv(GL_LIGHT0, GL_POSITION, li ...

  8. CF735D Taxes 哥德巴赫猜想\判定素数 \进一步猜想

    http://codeforces.com/problemset/problem/735/D 题意是..一个数n的贡献是它的最大的因子,这个因子不能等于它本身 然后呢..现在我们可以将n拆成任意个数的 ...

  9. nginx日志中文变成类似\xE9\xA6\x96\xE9\xA1\xB5-\xE6\x8E\xA8\xE8\x8D\x90的东西,治本方案

    这里:https://groups.google.com/forum/#!topic/openresty/NcRSb5gTmVU 主要是: 这与 ngx_lua 无关,是较新的 nginx 核心引入的 ...

  10. 浩瀚移动POS收银开单扫描解决方案PDA仓储系统,无线批发,移动批发,无线POS,无线销售APP-车销管理PDA

    适用范围 各种业态的批发商铺.批发市场.订货会.展销会.配送中心仓库…… 产品简介 随着移动技术与智能PDA设备的迅猛发展,中国已经跨步进入移动信息化社会.移动商务是移动信息社会的重要载体与形式,它开 ...