查看: 1945|回复: 9

怎么定义结点数组

[复制链接]

该用户从未签到

发表于 2009-4-2 12:19:18 | 显示全部楼层 |阅读模式
我在做一个鼠标移过会隐藏的东东,我是用结点隐藏做的,我想定义一数组,然后弄三个重合的结点,隐藏其中两个,现在遇到的问题是只有数组中的第一个结点可以初始化,后面两个无效,有谁知道怎么办?谢谢!
我初始化数组代码如下:
osg::Geode* left[3] ;
left[0]->addDrawable(createPlane(80.0f,80.0f,osgDB::readImageFile("Data/Image/left1.bmp")));
left[1]->addDrawable(createPlane(80.0f,80.0f,osgDB::readImageFile("Data/Image/left2.bmp")));
left[2]->addDrawable(createPlane(80.0f,80.0f,osgDB::readImageFile("Data/Image/left3.bmp")));
left[0]->setNodeMask(1);
left[1]->setNodeMask(0);
left[2]->setNodeMask(0);

该用户从未签到

发表于 2009-4-2 12:28:25 | 显示全部楼层
您是怎么初始化节点的?从您的程序代码来看,应该至少有类似这样的语句:
  1. for ( unsigned int i=0; i<3; ++i )
  2.     left[i] = new osg::Geode;
复制代码

该用户从未签到

 楼主| 发表于 2009-4-2 12:54:24 | 显示全部楼层

回复 2楼 的帖子

嗯,有,忘了拷贝过来了

该用户从未签到

 楼主| 发表于 2009-4-2 12:55:15 | 显示全部楼层

回复 2楼 的帖子

我的问题是下面两句好像没有效果
left[1]->addDrawable(createPlane(80.0f,80.0f,osgDB::readImageFile("Data/Image/left2.bmp")));
left[2]->addDrawable(createPlane(80.0f,80.0f,osgDB::readImageFile("Data/Image/left3.bmp")));

该用户从未签到

发表于 2009-4-2 13:02:26 | 显示全部楼层
不是addDrawable没效果,而是setNodeMask(0)会使得节点在场景中不能显示,不知道您为什么要这样设置。如果想用node mask来作为掩码的话,可以设置为其它的非零值并正确处理掩码的工作

该用户从未签到

 楼主| 发表于 2009-4-2 13:11:16 | 显示全部楼层

回复 5楼 的帖子

我是用下面这个来只显示left[0]而隐藏另外两个:
left[0]->setNodeMask(1);
left[1]->setNodeMask(0);
left[2]->setNodeMask(0);
而用
left[0]->setNodeMask(0);
left[1]->setNodeMask(1);
left[2]->setNodeMask(0);
来处理鼠标在该结点位置显示left[1]而隐藏另外两个;

left[0]->setNodeMask(0);
left[1]->setNodeMask(0);
left[2]->setNodeMask(1);
来处理鼠标点击该结点时显示left[2]而隐藏另外两个
不是这样处理的吗?那要怎么弄呢,请赐教喔,呵呵,谢谢你的耐心回答

该用户从未签到

发表于 2009-4-2 13:56:51 | 显示全部楼层
也许可以这么处理,不过最好的方法是使用osg::Switch节点

该用户从未签到

 楼主| 发表于 2009-4-2 14:20:54 | 显示全部楼层

回复 7楼 的帖子

left[0]这个geode以及我另外建的一个来做试验的geode均可以实现我在上面说的显示和隐藏的效果,就是left[1]和left[2]这两个不可以,会不会是我对数组的操作问题,因如如果我把这几个都弄成名字不一样的话是可以的,只是我为了可以把另外的几个函数包装起来才用数组操作

该用户从未签到

发表于 2009-4-2 15:04:08 | 显示全部楼层
可能是您的数组操作问题,但是从上面的代码中我看不出更多端倪。此外显示和隐藏请尽量使用Switch节点而非节点掩码。掩码在场景裁减和碰撞检测时都有用处,操作不慎的话可能会产生错误的结果

该用户从未签到

 楼主| 发表于 2009-4-2 17:16:59 | 显示全部楼层
哦,好的,谢谢你的耐心回答喔,初学者,以后还有好多问题应该
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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