OSG使用HUD的方式创建小地图

本文介绍了如何在OpenSceneGraph(OSG)中利用HUD相机来实现小地图功能,包括小地图的创建、添加边框以及实时显示视点位置的十字标示。通过代码示例详细阐述了实现过程,最后提到相关代码已上传至GitHub供参考。
摘要由CSDN通过智能技术生成

在三维场景中我们经常遇到需要小地图的时候,由于小地图是一直显示在最前端的,所以可以考虑使用HUD相机的方式绘制一个小地图,甚至我们还可以在小地图上标示出当前的视点(或者模型)以及它的移动。
实现功能目标:
- 实现小地图;
- 在小地图上实时的标示出视点位置。
1、HUD相机创建代码如下:

    m_pHUDCamera = new osg::Camera;

    // 设置投影矩阵
    m_pHUDCamera->setProjectionMatrixAsOrtho2D(m_iX, m_iWidth, m_iY, m_iHeight);

    // 设置视口矩阵
    m_pHUDCamera->setReferenceFrame(osg::Transform::ABSOLUTE_RF);
    m_pHUDCamera->setViewMatrix(osg::Matrix::identity());

    // 只清除深度缓冲区
    m_pHUDCamera->setClearMask(GL_DEPTH_BUFFER_BIT);

    // 设置HUD相机在主相机之后渲染
    m_pHUDCamera->setRenderOrder(osg::Camera::POST_RENDER);

    // HUD相机不获取Event的焦点
    m_pHUDCamera->setAllowEventFocus(false);
    m_pHUDCamera->setViewport(m_iX, m_iY, m_iWidth, m_iHeight);

2、完成HUD相机的创建后,我们就可以在HUD相机上贴小地图的纹理了,代码如下:

// 增加HUD相机的渲染内容,即map
    osg::ref_ptr<osg::Geode> pGeode = new osg::Geode;

    // 创建纹理
    osg::ref_ptr<osg::Geometry> pGeometry = new osg::Geometry;
    {
        // 顶点
        osg::ref_ptr<osg::Vec3Array> verArray = new osg::Vec3Array;
        verArray->push_back(osg::Vec3(0, 0, -1));
        verArray->push_back(osg::Vec3(m_iWidth, 0, -1));
        verArray->push_back(osg::Vec3(m_iWidth, m_iHeight, -1));
        verArray-></
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值