查看: 2008|回复: 8

加载到osgOcean的模型 颜色是白色的?

[复制链接]

该用户从未签到

发表于 2013-5-11 20:53:15 | 显示全部楼层 |阅读模式
本帖最后由 hustlab 于 2013-5-11 20:57 编辑

最近在看OsgOCean的例子,看到小船在水面上荡漾,感觉很不错。可是小船的颜色是白色的,我换了另一个模型,颜色还是白色的,搜了一下解决方法,添加了:
boat->getOrCreateStateSet()->setMode(GL_RESCALE_NORMAL,osg::StateAttribute::ON);
还是没有效果,通过按g键,模型部分有了颜色,另我缩放模型也没有效果!望版主给提供一下解决的思路。
在osgviewer在看的船的效果是:
QQ截图20130511203403.jpg

在osgExample中显示的效果是:
QQ截图20130511205533.jpg

osgoceanExample例子中的这部分代码是:
if (testCollision)
    {
       osgDB::Registry::instance()->getDataFilePathList().push_back("resources/boat");               
        const std::string filename = "boatnew.ive"; //boat.3ds
        osg::ref_ptr<osg::Node> boat = osgDB::readNodeFile(filename);
        if(boat.valid())
        {
           boat->setNodeMask( scene->getOceanScene()->getNormalSceneMask()
                   | scene->getOceanScene()->getReflectedSceneMask()
                   |  scene->getOceanScene()->getRefractedSceneMask() );

            osg::ref_ptr<osg::MatrixTransform> boatTransform = new osg::MatrixTransform;
            boatTransform->addChild(boat.get());
            boatTransform->setMatrix(osg::Matrix::scale(osg::Vec3f(20.0,20.0,20.0))*osg::Matrix::translate(osg::Vec3f(-400.0f, 2400.0f,0.0f)));//缩放无效
                       
            boatTransform->setUpdateCallback( new BoatPositionCallback(scene->getOceanScene()) );
            boat->getOrCreateStateSet()->setMode(GL_RESCALE_NORMAL,osg::StateAttribute::ON);
       scene->getOceanScene()->addChild(boatTransform.get());   
        }
        else
        {
            osg::notify(osg::WARN) << "testCollision flag ignored - Could not find: " << filename << std::endl;
        }
}

望遇到此问题的朋友给个提示!

该用户从未签到

发表于 2013-5-12 03:08:14 | 显示全部楼层
本帖最后由 VR_user_happy 于 2013-5-12 03:15 编辑

模型放大问题:
boatTransform->setUpdateCallback( new BoatPositionCallback(scene->getOceanScene()) );
这一句是说你的模型位置做了Transform的回调,都回调了,每次用了更新的Transform了, 你设的比例只是刚开始的瞬间是那个值,后面就等于没设了

你可以再建一个新节点,和一个比例放大的tanstrform, 然后把回调的tanstrform添加到这个节点的子节点下,放大就应该能实现了。
    添加到场景查看的应该是新建的这个节点(包含回调作为器子节点的)!

该用户从未签到

发表于 2013-5-12 04:06:51 | 显示全部楼层
本帖最后由 VR_user_happy 于 2013-5-12 04:16 编辑

没看过osgOcean,不太清楚里面的代码,但是模型的颜色肯定与StateSet有关
---你设定的StateSet
   boat->getOrCreateStateSet()->setMode(GL_RESCALE_NORMAL,osg::StateAttribute::ON);
1:
   参数是什么意思
GL_RESCALE_NORMAL(GL重设比例法向量?)
setMode的属性很多, 参数可以看DataSet Class

2.是设置了属性,但没应用!
  试试:
      osg::ref_ptr<osg::StateSet> stateset =boat->getOrCreateStateSet();
      --------------------------------------------getOrCreateStateSet()只是创建了一个状态属性stateset设置对象,
    stateset->setMode(LIGHTMODEL,osg::StateAttribute::ON);
   ----------------------------------------setMode()只是设定状态属性stateset设置对象的模式,
   最重要的是下面的应用:
boat->setStateSet(stateset);
  
3.
与你的控制器有关

该用户从未签到

 楼主| 发表于 2013-5-13 21:56:43 | 显示全部楼层
谢谢回复,不能缩放果然是回调造成的

该用户从未签到

 楼主| 发表于 2013-5-13 21:56:48 | 显示全部楼层
谢谢回复,不能缩放果然是回调造成的

该用户从未签到

发表于 2013-5-14 08:02:45 | 显示全部楼层
GL_NORMALIZE

该用户从未签到

发表于 2014-4-9 10:01:26 | 显示全部楼层
请问你加载的船模型自身的纹理显示出来了吗?

该用户从未签到

发表于 2014-4-9 10:14:56 | 显示全部楼层
纹理路径不对啊  是绝对路径还是相对路径

该用户从未签到

发表于 2014-4-9 10:19:30 | 显示全部楼层
ive格式的模型不是把纹理和模型打包到一起了吗?用的相对路径
我的代码是:
osgDB::Registry::instance()->getDataFilePathList().push_back("resources/boat");//路径在debug中
    const std::string filename ="ship.ive";//"navalship.ive";  
    osg::ref_ptr<osg::Node> boat =osgDB::readNodeFile(filename);
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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