|
各位大神,小弟刚学C++和OSG不久,看到教程上一个关于模型拾取的例子,这个例子中,点击模型,如果模型有网格点击之后就能把网格去掉,但是我想加一个功能,就是当点击模型,如果拾取的模型没有网格,则给模型添加网格。谢谢各位!代码如下:
void Pick(float x, float y)
{
//申请一个相交测试的结果集,判断屏幕与场景相交后,得出的结果集放入此中
osgUtil:ineSegmentIntersector::Intersections intersections;;
//利用view的computerIntersection函数来测试屏幕与场景相交结果存入到结果集中
if (mViewer->computeIntersections(x, y, intersections))
{
//申请一个结果集遍历器,遍历该结果集
for(osgUtil::LineSegmentIntersector::Intersections::iterator hitr = intersections.begin();
hitr != intersections.end();
++hitr)
{
//如果遍历器中的结果不是空
if (!hitr->nodePath.empty() && !(hitr->nodePath.back()->getName().empty()))
{
//得到遍历器中的nodepath,以此可以判断该path中是否有想要的结点
osg::NodePath& np = hitr ->nodePath ;
for (int i=np.size()-1; i>=0; --i)
{
osgFX::Scribe* sc= dynamic_cast<osgFX::Scribe *>(np[i]);
//如果结果集中有所需要的结点,则设置隐藏该结点。其中有一个动态转换,如果可以转换成功则左值不为NULL,否则为NULL
if (sc !=NULL)
{
if(sc->getNodeMask() != 0)
sc->setNodeMask(0);
}
}
}
}
}
}
|
|