Mze 发表于 2014-12-25 19:54:33

.ive文件转换成.obj文件,纹理丢失

本帖最后由 Mze 于 2014-12-25 19:55 编辑

程序读入.ive文件,用osgViewer浏览场景,场景是完整的,转存成.obj文件文件。用osgViewer场景浏览器浏览此读入的.obj,发现纹理丢失

1.完整的.ive转成.obj程序

#include <osgViewer/Viewer>

#include <osgDB/ReadFile>
#include <osgDB/WriteFile>
#include <osgUtil/Optimizer>

int main(int argc, char**argv)
{
        osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer();

        osg::ref_ptr<osg::Group> root = new osg::Group();
       
        osg::ref_ptr<osg::Node> node = osgDB::readNodeFile("abc.ive"); //读入.ive文件

        root->addChild(node.get());

        osgDB::writeNodeFile(*(root.get()), "abc.obj"); // 转存.obj文件
       
        osgUtil::Optimizer optimizer;
        optimizer.optimize(root.get());

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

        viewer->realize();

        return viewer->run();
}

2.完整的浏览.obj文件场景的程序

#include <osgViewer/Viewer>

#include <osgDB/ReadFile>
#include <osgDB/WriteFile>
#include <osgUtil/Optimizer>

int main(int argc, char**argv)
{
        osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer();

        osg::ref_ptr<osg::Group> root = new osg::Group();
       
        osg::ref_ptr<osg::Node> node = osgDB::readNodeFile("abc.obj"); //读入.obj文件

        root->addChild(node.get());
       
        osgUtil::Optimizer optimizer;
        optimizer.optimize(root.get());

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

        viewer->realize();

        return viewer->run();
}

刚开始学习OSG,求前辈指点!谢谢!

Mze 发表于 2014-12-26 09:19:34

没人理会啊:'(

Mze 发表于 2014-12-30 20:51:59

得到Array的回复:ive文件是可以包含贴图数据本身的;obj不行,只能保存外部文件的引用。
如何恢复纹理:可以写程序将内嵌纹理数据重新导出为外部文件,然后再去对应。
不过很显然obj不是一个足够好的场景格式,它太古老了,只能存储些几何和材质信息。

axibian 发表于 2017-3-7 10:47:58

Mze 发表于 2014-12-30 20:51
得到Array的回复:ive文件是可以包含贴图数据本身的;obj不行,只能保存外部文件的引用。
如何恢复纹理: ...

ive内部纹理可以指定格式吗?比如希望纹理格式为jpg,我该怎么指定?或者怎么做?
页: [1]
查看完整版本: .ive文件转换成.obj文件,纹理丢失