|
本帖最后由 hello! 于 2010-7-21 05:27 编辑
参考了osgExample中的osgmultitexturecontrol的例子,想给地形节点最后加上地形夸张(使用osgTerrain::Terrain::setVerticalScale ),所以采用下面方式:
// arguments为参数命令,可以是读入的地形数据
osg::Node* rootnode = osgDB::readNodeFiles(arguments);
osgTerrain::Terrain* terrain = findTopMostNodeOfType<osgTerrain::Terrain>(rootnode);
if (!terrain)
{
terrain = new osgTerrain::Terrain;
terrain->addChild(rootnode);
rootnode = terrain;
}
terrain->setVerticalScale(verticalScale);
结果读入的地形没有任何变化,即地形夸张失败,请问怎么回事呢?谢谢
备注:findTopMostNodeOfType是参考osgmultitexturecontrol的例子,完全照搬的:
template<class T>
class FindTopMostNodeOfTypeVisitor : public osg::NodeVisitor
{
public:
FindTopMostNodeOfTypeVisitor():
osg::NodeVisitor(osg::NodeVisitor::TRAVERSE_ALL_CHILDREN),
_foundNode(0)
{}
void apply(osg::Node& node)
{
T* result = dynamic_cast<T*>(&node);
if (result)
{
_foundNode = result;
}
else
{
traverse(node);
}
}
T* _foundNode;
};
template<class T>
T* findTopMostNodeOfType(osg::Node* node)
{
if (!node) return 0;
FindTopMostNodeOfTypeVisitor<T> fnotv;
node->accept(fnotv);
return fnotv._foundNode;
} |
|