OSG中的HUD

OSG中的HUD

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

实现要点:
1.关闭光照,不受场景光照影响,所有内容以同一亮度显示
2.关闭深度测试
3.调整渲染顺序,使它的内容最后绘制
4.设定参考贴为绝对型:setReferenceFrame(osg::Transform:ABSOLUTE_RF)
5.使其不受父节点变换的影响:setMatrix(osg::Matrix::identity())
6.使用平行投影,设定虚拟投影窗口的大小,这个窗口的大小决定了后面绘制的图形和文字的尺度比例
示例代码:

 // 创建 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);

原文:
http://www.cnblogs.com/chaoswong/p/3144608.html

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容使用说明 YOLO高分设计资源源码,详情请查看资源内容使用说明 YOLO高分设计资源源码,详情请查看资源内容使用说明 YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值