查看: 1138|回复: 2

求助:关于OSG 3D贴图的问题

[复制链接]

该用户从未签到

发表于 2012-8-22 11:54:36 | 显示全部楼层 |阅读模式
int main(){   
osg::ref_ptr<osgViewer::Viewer> viewer =new osgViewer::Viewer();//ps_texture_1k.png
    osg::ref_ptr<osg::Group> root=new osg::Group();
    osg::ref_ptr<osg::Image> image=osgDB::readImageFile("/home/hcrdintern/chyl/osgdem/VirtualPlanetBuilder-0.9.10/ps_texture_1k.png");
    osg::ref_ptr<osg::Node> node = osgDB::readNodeFile("/home/hcrdintern/chyl/osgdem/VirtualPlanetBuilder-0.9.10/new.ive");

    osg::Texture2D* texture2 = new osg::Texture2D;
    texture2->setDataVariance(osg::Object:YNAMIC);
    texture2->setImage(image); // 将图片关联到纹理

    osg::ref_ptr<osg::StateSet> stateset=new osg::StateSet();
    osg::TexEnv* decalTexEnv = new osg::TexEnv;
    decalTexEnv->setMode(osg::TexEnv::DECAL);
    stateset->setTextureAttribute(0, decalTexEnv, osg::StateAttribute::ON);
    stateset->setTextureAttributeAndModes(0, texture2, osg::StateAttribute::ON);
    node->setStateSet(stateset.get());
    root->addChild(node.get());

    osgUtil::Optimizer op;
    op.optimize(root.get());

    viewer->setSceneData(root.get());

    viewer->realize();

    viewer->run();
    return 0;
}

上面是我实现3D贴图的一个代码,主要的功能是加载一个osgdem生成的没有纹理的3D模型,在这个模型上贴不同的纹理图片。可是当我讲纹理图贴上去之后发现显示不对,纹理图并没有完全覆盖整个模型,往往是几个相同的图覆盖了这个模型。请问各位应该怎么改呢?

Screenshot-2.png

当对模型进行缩放后

Screenshot-3.png

该用户从未签到

 楼主| 发表于 2012-8-22 16:24:21 | 显示全部楼层
找到是什么原因了, 因为在利用VPB生成无纹理的ive模型时调用了osgdem --xx 10 --yy 10 -d ps_height_16k.tif -l 8 -v 0.1 -o new.ive命令,今天下午稍晚时间当将参数l的数值修改为1时,所有的一切都正常了。忙了我这么长时间啊~~!!!疯掉了。。。。

该用户从未签到

发表于 2012-8-22 21:27:13 | 显示全部楼层
哈,解决就好!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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