查看: 3284|回复: 8

Hud图片显示

[复制链接]

该用户从未签到

发表于 2013-12-6 15:01:03 | 显示全部楼层 |阅读模式
本帖最后由 就是那个胖子 于 2013-12-12 13:28 编辑

想在窗口右上角抬头显示图片,借鉴了wontor的帖子:http://bbs.osgchina.org/forum.ph ... amp;extra=#pid60599
代码如下:
osg::ref_ptr<osg::Group> rootNode = new osg::Group();
        rootNode = m_pCustomOSGWnd->m_pMapNode;
        rootNode->getOrCreateStateSet()->setMode(GL_LIGHTING, osg::StateAttribute::OFF);

        CRect rect;
        GetClientRect(&rect);
        //GetWindowRect(&rect);
        double x = rect.Width();//宽度
        double y = rect.Height();//高度
        //创建Hud相机
        osg::Camera* hudCamera = new osg::Camera;
        hudCamera->setReferenceFrame(osg::Transform::ABSOLUTE_RF);
        hudCamera->setProjectionMatrixAsOrtho2D(0,x,0,y);
        hudCamera->setViewMatrix(osg::Matrix::identity());
        hudCamera->setRenderOrder(osg::Camera:OST_RENDER);
        hudCamera->setClearMask(GL_DEPTH_BUFFER_BIT);
        hudCamera-> setAllowEventFocus(false );

        osg::Geode* geode = new osg::Geode;
        osg::Image* image = osgDB::readImageFile("F:\\DaoHang-png\\move_panel.png");
        double m_dWidth = 200;
        double m_dHeight = 200;
        if (image)
        {
                osg::Vec3 _origin= osg::Vec3(-1.0f,-1.0f,0.0f);
                osg::Vec3 _width;
                osg::Vec3 _height;
       
                _width.set(m_dWidth,0.0f,0.0f);
                _height.set(0.0f,m_dHeight,0.0f);
                osg::Geometry* geometry = osg::createTexturedQuadGeometry(_origin,_width,_height);
                osg::StateSet* stateset = geometry->getOrCreateStateSet();
                stateset->setTextureAttributeAndModes(0,new osg::Texture2D(image),osg::StateAttribute::ON);
                stateset->setMode(GL_BLEND,osg::StateAttribute::OFF);
                stateset->setRenderingHint(osg::StateSet::TRANSPARENT_BIN);
                stateset->setMode(GL_DEPTH_TEST,osg::StateAttribute::OFF);
       
        geode->addDrawable(geometry);
        }

        osg::PositionAttitudeTransform* transform = new osg::PositionAttitudeTransform;
        transform->setPosition(osg::Vec3(x-m_dWidth,y-m_dHeight,0.0));
        transform->addChild(geode);

        hudCamera->addChild(transform);
        rootNode->addChild(hudCamera);

该用户从未签到

发表于 2013-12-9 09:55:26 | 显示全部楼层
osg::Vec3 _origin= osg::Vec3(-1.0f,0.0f,0.0f);这个坐标应该是不对的

该用户从未签到

 楼主| 发表于 2013-12-10 13:27:09 | 显示全部楼层
bpcbcm 发表于 2013-12-9 09:55
osg::Vec3 _origin= osg::Vec3(-1.0f,0.0f,0.0f);这个坐标应该是不对的

那这个坐标该怎么设置啊,不是很懂,能指点下吗?谢谢了

该用户从未签到

发表于 2013-12-10 16:53:42 | 显示全部楼层
看下cookbook的Compass例子……

该用户从未签到

 楼主| 发表于 2013-12-11 09:30:55 | 显示全部楼层
亦舒雪 发表于 2013-12-10 16:53
看下cookbook的Compass例子……

谢谢,按照您说的例子已经实现了

该用户从未签到

发表于 2013-12-11 22:46:22 | 显示全部楼层
就是那个胖子 发表于 2013-12-11 09:30
谢谢,按照您说的例子已经实现了

发图上来瞧瞧撒

该用户从未签到

 楼主| 发表于 2013-12-12 09:49:15 | 显示全部楼层

指南针能关联地球操作,其他的还不行
Hud导航.PNG

该用户从未签到

发表于 2014-1-10 19:16:52 | 显示全部楼层
就是那个胖子 发表于 2013-12-12 09:49
指南针能关联地球操作,其他的还不行

嘿嘿
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表