|
如题:先上代码:
int getCollisionPointMask(osg::Vec3 pos,osg::Node * node , osg::Matrix localMatrix)
{
//球场节点为空则返回0
if (!node )
return 0;
osg::Vec3f fromPoint=localMatrix.preMlt(pos+osg::Vec3(0,0,100));
osg::Vec3f toPoint=localMatrix.preMlt(pos+osg::Vec3(0,0,-10));
osgUtil::IntersectVisitor iv;
//iv.setTraversalMask(_intersectTraversalMask);
osg::ref_ptr<osg:ineSegment> segForward = new osg::LineSegment;
segForward->set(fromPoint,toPoint);
if (!segForward->valid())
return 0;
iv.addLineSegment(segForward.get());
node->accept(iv);
if (iv.hits())
{
osgUtil::IntersectVisitor::HitList& hitList = iv.getHitList(segForward.get());
if (!hitList.empty())
{
osg::Vec3d ip = hitList.front().getWorldIntersectPoint();
//得到物体
//osg::ref_ptr<osg::Node> node = new osg::Node();
//osg::ref_ptr<osg::Group> parent = new osg::Group();
osgUtil::IntersectVisitor::HitList::iterator itr;
itr=hitList.begin();
osg::NodePath& nodePath = itr->_nodePath;
osg::ref_ptr<osg::Node> node = (nodePath.size()>=1)?nodePath[nodePath.size()-1]:0;
osg::ref_ptr<osg::Group> parent = (nodePath.size()>=2)?dynamic_cast<osg::Group*>(nodePath[nodePath.size()-2]):0;
if ( parent->getNodeMask()==291)
{
// PhysicsManager::terrain = parent->getNodeMask();
return parent->getNodeMask();
}
//输出接点信息
/*std::string strParentNode = parent->getName();
std::string strSelfNode = node->getName();
if (strParentNode!=""|| strSelfNode!="")
{
std::cout<<"*************************************************************"<<std::endl;
std::cout<<"arent NodePath:"<< parent->getName() <<",Parent NodePathMask:"<<parent->getNodeMask()<<std::endl;
std::cout<<"Self NodePath:"<< node->getName() <<",Self NodePathMask:" <<node->getNodeMask() <<std::endl;
std::cout<<"*************************************************************"<<std::endl;
}*/
//没有得到掩码
return 0;
}
//碰撞点空
return 0;
}
return 0;
}
代码大致如上,相信这个一看大家都明白要干什么!代码仅仅表示一下意思而已!
现在有一个问题,我用max建的模型,当上边的那个矩阵localMatrix拿的是一个节点类型为matrixtransform类型的节点的矩阵的时候,交集测试竟然拿不到交集,也就是没有交点!但是,我修改建模的一些方式,是之前的那个节点从matrixtransform类型group类型的节点的时候,就可以进行交集测试,拿到交集了!我真的不明白为什么会有这个问题?matrixtransform节点为什么不能进行局部的交集测试呢,而group类型的节点可以!
另外,对于maya模型,不论是matrixtransform类型的节点还是group类型的节点,都可以进行交集测试拿到交集,就是max建的模型会存在这个问题!
还请高手指教,真的不明白!很疑惑,各位指点指点吧,拜谢拜谢!!!! |
|