查看: 1598|回复: 8

关于:osg例子中的MASK

[复制链接]

该用户从未签到

发表于 2012-5-9 15:19:20 | 显示全部楼层 |阅读模式
在学习OSG的时候,经常会看到例子中有一些,这样的定义:

  1. const unsigned int MASK_2D = 0xF0000000;
  2. const unsigned int MASK_3D = 0x0F000000;
复制代码
然后这样用

  1.    Node->setNodeMask(MASK_3D);

  2.     osgWidget::WindowManager* wm = new osgWidget::WindowManager(
  3.         &viewer,
  4.         1280.0f,
  5.         1024.0f,
  6.         MASK_2D,
  7.         osgWidget::WindowManager::WM_PICK_DEBUG
  8.     );
复制代码
不明白的地方,这个MASK很显然是32位的这个一个码,这个MASK起什么作用啊?码的每一位都是什么意思啊?目前我一点也不知道,希望大家多多帮忙

该用户从未签到

发表于 2012-5-10 14:50:04 | 显示全部楼层

16进制的一个数,用于标识节点的掩码状态,可以用于遍历过滤、阴影标识体等操作

该用户从未签到

 楼主| 发表于 2012-5-10 19:42:07 | 显示全部楼层
FlySky 发表于 2012-5-10 14:50
16进制的一个数,用于标识节点的掩码状态,可以用于遍历过滤、阴影标识体等操作

能详细点吗?

该用户从未签到

发表于 2012-5-10 20:49:22 | 显示全部楼层
给你举个例子吧:
/**//** 创建一个多面体求交器*/
    osgUtil:olytopeIntersector* pI =new osgUtil::PolytopeIntersector(poly);
    /**//** 构造一个交集访问器*/
    osgUtil::IntersectionVisitor iv(pI);    对于求交集 则应当对于场景根节点做请求访问的操作..这当中可能需要避开自身节点等一些不必要的节点等.
    /**//** 设置避开自身节点*/
    _model->setNodeMask(0x0);
    /**//** 根节点请求访问操作*/
    root->accept(iv);
    /**//** 恢复自身节点的NodeMask*/
    _model->setNodeMask(0xffffffff);

该用户从未签到

 楼主| 发表于 2012-5-11 19:05:23 | 显示全部楼层
CWorld 发表于 2012-5-10 20:49
给你举个例子吧:
/**//** 创建一个多面体求交器*/
    osgUtillytopeIntersector* pI =new osgUtil: ...

首先非常感谢您的回复,我认真的看了您的例子。

  1.     /**//** 设置避开自身节点*/
  2.     _model->setNodeMask(0x0);
  3.     /**//** 根节点请求访问操作*/
  4.     root->accept(iv);
  5.     /**//** 恢复自身节点的NodeMask*/
  6.     _model->setNodeMask(0xffffffff);
复制代码
0X00000000  和 0XFFFFFFFF   ,显然是两个极端。

我还有一个地方不明白,您在写这两个数字的时候,心里是怎么想的?为什么偏偏是这两个数字?
原因:我在看OSG自带的一些例子的时候,看到过各种各样的数值。如果我要写一个数字的话,我该注意些什么规律或者我的心里该怎么想???

该用户从未签到

发表于 2012-5-11 20:45:23 | 显示全部楼层

没啥要求,随便写,16进制数就可以了~~~~~~

该用户从未签到

 楼主| 发表于 2012-5-12 09:48:04 | 显示全部楼层
?????!!!!!!!!!!!

该用户从未签到

发表于 2012-5-14 10:02:24 | 显示全部楼层
有什么可疑问的?这本来就是自己根据需求设置的数字

该用户从未签到

发表于 2012-5-15 16:21:38 | 显示全部楼层
在accept之前都会检查一下这个NodeMask是否符合要求,源码中有运算的过程
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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