查看: 3860|回复: 10

【求助】osg读取大文件非常慢!!

[复制链接]
  • TA的每日心情
    郁闷
    2019-12-15 18:50
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2019-12-14 09:39:10 | 显示全部楼层 |阅读模式
    恳请大佬帮忙看下:我用osg读取一个22.8MB的stl,用时14分钟 ,程序已经是release版本的了,可能是我没有开启某个设置?文件太大了没办法用附件形式上传,代码截图见图片。
    Osg读取文件.png

    该用户从未签到

    发表于 2019-12-15 10:09:16 | 显示全部楼层
    这能看出来啥,建议跟一下源码
  • TA的每日心情
    郁闷
    2019-12-15 18:50
  • 签到天数: 1 天

    [LV.1]初来乍到

     楼主| 发表于 2019-12-15 15:35:10 | 显示全部楼层
    sy2178668 发表于 2019-12-15 10:09
    这能看出来啥,建议跟一下源码

    这个可以放在后面,我就是想问下有没有朋友用osg读取过大的stl文件,看是不是跟我一样,这样我就能排除是我操作不当的原因了,如果是osg本身的原因,那我就改用其他库了。
  • TA的每日心情
    郁闷
    2019-12-15 18:50
  • 签到天数: 1 天

    [LV.1]初来乍到

     楼主| 发表于 2019-12-15 16:10:59 | 显示全部楼层
    有没有老哥读取过大文件啊,这几天被osg搞得太郁闷了

    该用户从未签到

    发表于 2019-12-15 17:32:36 | 显示全部楼层
    ASCII码的STL文件读起来确实慢,要跟下代码看是什么问题,如果是I/O问题的话可以先把整个文件读到内存里,然后再解析。

    该用户从未签到

    发表于 2019-12-15 18:01:42 | 显示全部楼层
    本帖最后由 hwyqw 于 2019-12-15 18:06 编辑

    可以试试用osgconv 将这个文件,转成ive格式,然后再读取这个ive,看看是否还是需要很长时间?
    osgconv cow.obj cow.ive 这种命令会将cow.obj 转成cow.ive,你那边应该是   osgconv a.stl a.ive 命令。
    假如时间很短,而你 的应用程序只关心显示出来的画面,那么就可以使用这种ive格式的模型文件。
    假如时间很长,可能原因,这个stl文件损坏, OSG对stl支持不好,或者其他原因,那就只能打印时间了。
  • TA的每日心情
    郁闷
    2019-12-15 18:50
  • 签到天数: 1 天

    [LV.1]初来乍到

     楼主| 发表于 2019-12-15 18:14:01 | 显示全部楼层
    smash 发表于 2019-12-15 17:32
    ASCII码的STL文件读起来确实慢,要跟下代码看是什么问题,如果是I/O问题的话可以先把整个文件读到内存里, ...

    代码方面我就用了osg的readNodeFile接口而已,只是我怀疑是不是我用错了,因为那个接口有第二个参数

    该用户从未签到

    发表于 2019-12-15 18:36:04 | 显示全部楼层
    ReaderWriterSTL::readNode 在这个函数,加个断点,然后单步执行,看看哪个地方耗时。。。
  • TA的每日心情
    郁闷
    2019-12-15 18:50
  • 签到天数: 1 天

    [LV.1]初来乍到

     楼主| 发表于 2019-12-15 18:47:05 | 显示全部楼层
    hwyqw 发表于 2019-12-15 18:01
    可以试试用osgconv 将这个文件,转成ive格式,然后再读取这个ive,看看是否还是需要很长时间?
    osgconv co ...

    我试了下,转完之后读取就非常非常快了,但转ive还是太慢了,花了十多分钟,下面的图片是我的模型。
    Osg读取文件.png
  • TA的每日心情
    郁闷
    2019-12-15 18:50
  • 签到天数: 1 天

    [LV.1]初来乍到

     楼主| 发表于 2019-12-16 10:09:23 | 显示全部楼层
    解决了,原因是osg本身在读取stl文件时会对该文件进行三角面的优化,我们只需要关闭该处优化就行了,在读取stl时传入下面这个参数:
    osgDB::Options* option = new osgDB::Options(std::string("noTriStripPolygons"))
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

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

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

    联系我们

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