查看: 2383|回复: 10

osgviewerMFC打开一些特定3DS文件时出错,应该从哪查起?

[复制链接]

该用户从未签到

发表于 2011-7-15 06:20:25 | 显示全部楼层 |阅读模式
本帖最后由 osg2010 于 2011-7-15 06:22 编辑

osgviewerMFC打开一些特定3DS文件时出错,应该从哪查起?

不是纹理的问题,因为把纹理去掉也会打开出错。

这些3DS都是用3DSMAX导出MAX文件而得到的,

发现3DSMAX有时也打不开它自己导出的这些3DS文件,不过据做模型的同事讲,同一MAX文件多次试验导出,有时会遇到一次3DSMAX能打开的

该用户从未签到

 楼主| 发表于 2011-7-15 06:26:40 | 显示全部楼层
调试时看到错误发生在这里,readNodeFile返回0
void cOSG::InitSceneGraph(void)
{
    // Init the main Root Node/Group
    mRoot  = new osg::Group;

    // Load the Model from the model name
    mModel = osgDB::readNodeFile(m_ModelName);

    // Optimize the model
    osgUtil::Optimizer optimizer;
    optimizer.optimize(mModel.get());
    optimizer.reset();

    // Add the model to the scene
    mRoot->addChild(mModel.get());
}

该用户从未签到

发表于 2011-7-15 08:21:58 | 显示全部楼层
readNodeFile返回0的话,说明没找到这个文件或者没找到插件,请检查您自己的文件或插件路径设置

该用户从未签到

 楼主| 发表于 2011-7-15 19:53:06 | 显示全部楼层
插件能找到,而且对一般的3DS还是能打开的,
但是对这一批3DS文件就不行,而且这些还是有密级的航天器模型,不能带出来测试更不能发到网上来.

请问ARRAY知道3DS做哪些操作之后就不是OSG支持的了吗?据说有的3DS里有一些未公开的格式。

我的同事今天告诉我,她昨天把一个MAX文件跟一个空环境的MAX文件做merge后,再导出为3DS,就能打开了,请问这可能会影响3DS中的那些部位呢?之前那个MAX直接导出的3DS不能打开。

我们用这种方式处理这批模型,但是仍然有一部分不能打开。

请问应该怎么办呢?谢谢!

该用户从未签到

发表于 2011-7-16 00:32:55 | 显示全部楼层
OSG对3DS文件的支持很差劲,看看OSG的3DS文件插件源代码就知道了。
3DS文件是支持刚体动画和摄像机动画的,OSG的3DS插件对这些统统不支持,而且对很多3DS文件渲染会出现错位现象。
我自己用OpenGL写过3DS文件的viewer,支持几乎所有的3DS文件特性,改天上传给你试试。

该用户从未签到

发表于 2011-7-16 08:57:58 | 显示全部楼层
3ds的格式是很老的格式了,osg对3ds的支持是源于lib3ds的库,我记得最新的lib3ds是可以读取关键帧的,所以sky11811你说的也许不准确。lib3ds对3ds的解析是相对比较完善的。一定要导出为3ds格式吗? 你可以导出为fbx或者osg自带的ive,osg格式吗?

该用户从未签到

发表于 2011-7-16 10:47:39 | 显示全部楼层
lib3ds是有读取关键帧的功能,可是osg的3ds插件没有使用这个功能。你做个3ds动画文件试试就知道了。

该用户从未签到

 楼主| 发表于 2011-7-17 20:17:28 | 显示全部楼层
谢谢sky11811,希望早日看到。
CWorld,军令啊,不能换格式,必须支持3DS。

目前传闻中的3DS中没公开的格式还有哪些呢?这么古老的格式,还不公开哦,还是仍然在演变当中?

该用户从未签到

发表于 2011-7-18 08:26:41 | 显示全部楼层
如果您确认是readNodeFile()返回0,那么就是您的文件的问题;如果不能上传相关的模型数据的话,我也没什么办法

该用户从未签到

发表于 2011-7-18 10:38:03 | 显示全部楼层
本帖最后由 CWorld 于 2011-7-18 10:42 编辑

这种情况下,我觉得你可以考虑一些办法。
1  从osg的源代码编译,在plugin-3ds的源代码里进行调试,这样找出问题
2 如果手上有OpenGL的代码可以渲染,你可以进行扩展OpenGL的扩展。重新写一个读取3ds的插件
3: 你看看其他比如OPenGVS什么的,可以读取吗? 如果可以读取,你把这个集成过来,获取读取的顶点列表,面片列表,纹理等,用OSG在渲染。
我觉得这主要出在3ds的文件解析上,所以你可以考虑用其他东西解析,用osg来渲染。
另外导出模型方面,你也可以多试试,比如你先转换为一种其他格式,这里只是举例哈,比如先使用3DMax转换为obj,然后再用Deep Exploration转换为3ds等,间接转换下。以上只是我的山寨思路,以前转换flt时,我这么用过,你参考下,也许有帮助哈。

该用户从未签到

发表于 2011-7-19 10:33:30 | 显示全部楼层
楼主的模型不用上传,模型有没有问题判断很简单,用3ds max导入,如果是对的那就没问题。
osg的3ds插件对3ds支持的很差劲,问题一堆,我用OpenGL写3ds viewer时遇到的问题在该插件里全部存在。当然3ds插件在osg里不是什么重要的插件。3ds文件还是一个不错的格式,支持摄像机动画,这样,做路径漫游的时候,就可以借助3ds max的强大动画编辑功能,做出十分优秀的路径漫游动画,而不必自己关心差值,以及动力学问题。
3ds是不支持骨骼动画的,也不支持多重纹理。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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