查看: 4463|回复: 6

请问:如何查看线框模式

[复制链接]

该用户从未签到

发表于 2008-4-14 10:22:18 | 显示全部楼层 |阅读模式
使用 osgview 命令查看osg文件 ,按键 w 键可以在 线、点、和多边形模式中切换。可是在osgviewermfc这个例子中不能够相应w键,貌似是osgGA::TrackballManipulator 没有处理这个键的消息。
  请问如果我想要在这三个模式中切换查看的化,该怎么做?
  添加那个manipulator?
  请诸位高手给个思路
  • TA的每日心情
    开心
    2019-11-11 10:36
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2008-4-14 10:34:48 | 显示全部楼层
    源文件:StateSetManipulator
    167行往后:
    void StateSetManipulator::setPolygonMode(osg:olygonMode::Mode newpolygonmode)
    {
        osg::PolygonMode* polyModeObj = getOrCreatePolygonMode();

        polyModeObj->setMode(osg::PolygonMode::FRONT_AND_BACK,newpolygonmode);
    }

    void StateSetManipulator::cyclePolygonMode()
    {
        osg::PolygonMode* polyModeObj = getOrCreatePolygonMode();

        osg::PolygonMode::Mode currentMode = getPolygonMode();
        // cycle through the available modes.  
        switch(currentMode)
        {
            case osg::PolygonMode::FILL : polyModeObj->setMode(osg::PolygonMode::FRONT_AND_BACK,osg::PolygonMode:INE); break;
            case osg::PolygonMode::LINE : polyModeObj->setMode(osg::PolygonMode::FRONT_AND_BACK,osg::PolygonMode::POINT); break;
            case osg::PolygonMode::POINT : polyModeObj->setMode(osg::PolygonMode::FRONT_AND_BACK,osg::PolygonMode::FILL); break;
        }
    }

    osg::PolygonMode::Mode StateSetManipulator::getPolygonMode() const
    {
        osg::PolygonMode* polyModeObj = dynamic_cast<osg::PolygonMode*>(_stateset->getAttribute(osg::StateAttribute::POLYGONMODE));
        if (polyModeObj) return polyModeObj->getMode(osg::PolygonMode::FRONT_AND_BACK);
        else return osg::PolygonMode::FILL;
    }

    osg::PolygonMode* StateSetManipulator::getOrCreatePolygonMode()
    {
        osg::PolygonMode* polyModeObj = dynamic_cast<osg::PolygonMode*>(_stateset->getAttribute(osg::StateAttribute::POLYGONMODE));
        if (!polyModeObj)
        {
            polyModeObj = new osg::PolygonMode;
            _stateset->setAttribute(polyModeObj);
        }
        return polyModeObj;
    }

    该用户从未签到

     楼主| 发表于 2008-4-14 10:43:10 | 显示全部楼层
    谢谢 FreeSouth !
    我试试!

    该用户从未签到

    发表于 2008-4-14 15:07:44 | 显示全部楼层
    很简单的,加一句就可以了~~~~~~~~
    viewer.addEventHandler( new osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet()) );

    该用户从未签到

    发表于 2008-4-17 11:15:14 | 显示全部楼层

    给楼主的建议

    原来我也不理解为什么按w键就能看到线框模式,后来我看了osgviewer的源代码。里面加了个StateSetManipulator的操作器,再查看操作器的代码就知道怎么回事了。建议楼主先看看osgviewer的源代码(这个告诉你为什么输入命令显示osg文件能通过w切换看到线框模式),再看StateSetManipulator操作器的代码,里面有事件处理的函数。

    该用户从未签到

     楼主| 发表于 2008-4-18 12:35:11 | 显示全部楼层
    谢谢诸位的热心帮助,这个问题在得到freesouth的帮助后我已经解决了。今天看到array和tylr两位的提示,知道可以优化。一来一回又学到不少东西。
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

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

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

    联系我们

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