osg库的HUD原理-三维软件视图窗口中角落的坐标及viewbox

osg库的Camera 有个setRenderOrder(…)方法,设置osg::Camera::PRE_RENDER,或者osg::Camera::POST_RENDER后,当osgViewer调frame函数时,内部会把场景树上的camera节点按照先PRE_RENDER后POST_RENDER排序绘制。camera节点render时候会调glClear(…),当创建一个post render的摄像机节点,并设置glClear标志只是DEPTH_BUFFER_BIT,则只会清空深度缓存区,保证后画的正确的遮挡关系,不会清空颜色缓冲区,以便于看见先画的画面。

frame()
{
    ...
    glViewport(视口设置整个窗口区域);
    glClear(深度帧|颜色帧);
    绘制场景vbo;
    ...

    glViewport(视口设置显示坐标的小块区域);
    glClear(深度帧);
    camera当前姿态更新xyz坐标的旋转矩阵;
    绘制xyz坐标vbo
    ...
      
    wglSwapbuffer();
}

这样camera节点下面挂着的geometry,将形成HUD效果,也叫画中画,即感觉一直在屏幕上遮挡着后面的场景,CAD软件像Proe,UG,SW等等中经常视图角落的坐标xyz,右上角的viewbox,游戏中的菜单等等都是这样做的,当鼠标操作摄像机旋转场景,将旋转方位设置给xyz坐标,坐标也跟着旋转。
还有的是用fbo渲染到纹理,场景先渲染到纹理,设为sceneImage,这个图片是粘到一个窗口大小的矩形几何体上先画,viewbox部分也渲染到纹理hudImage贴到一个小的矩形几何体放到前面场景那个几何体的靠近眼睛的位置,然后写glsl和sceneImage混合,背景像素用sceneImage,这样也能实现HUD,fbo+glsl更加现代和灵活。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值