查看: 2496|回复: 2

osgTerrain::Terrain中的垂直夸张setVerticalScale问题

[复制链接]

该用户从未签到

发表于 2010-7-21 05:25:23 | 显示全部楼层 |阅读模式
本帖最后由 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;
}

该用户从未签到

发表于 2010-7-21 08:42:43 | 显示全部楼层
您读入的rootnode需要由TerrainTile组成,否则setVerticalScale是没有意义的

该用户从未签到

 楼主| 发表于 2010-7-21 12:36:17 | 显示全部楼层
谢谢。可是我读入的rootnode是由TerrainTile组成的啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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