我想请问一下Java3D中对于.obj模型文件的.mtl贴图文件怎么样同时装载.
也就是在装载.OBJ文件的同时导入其贴图文件.
网上找了很多资料,说是将.obj和.mtl放在同一目录下,默认的装载器会自动读取.mtl文件。问题是总算弄到装载器自动去读取.mtl文件这步上了,却报了下面这个异常:Exception in thread "main" java.lang.IllegalArgumentException: Empty region!
at javax.imageio.ImageReader.computeRegions(ImageReader.java:2689)
at com.sun.imageio.plugins.wbmp.WBMPImageReader.read(WBMPImageReader.java:184)
at javax.imageio.ImageIO.read(ImageIO.java:1422)
at javax.imageio.ImageIO.read(ImageIO.java:1282)
at com.sun.j3d.utils.image.TextureLoader$1.run(TextureLoader.java:304)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.j3d.utils.image.TextureLoader.<init>(TextureLoader.java:299)
at com.sun.j3d.loaders.objectfile.ObjectFileMaterials.readMapKd(ObjectFileMaterials.java:305)
at com.sun.j3d.loaders.objectfile.ObjectFileMaterials.readFile(ObjectFileMaterials.java:361)
at com.sun.j3d.loaders.objectfile.ObjectFileMaterials.readMaterialFile(ObjectFileMaterials.java:408)
at com.sun.j3d.loaders.objectfile.ObjectFile.loadMaterialFile(ObjectFile.java:525)
at com.sun.j3d.loaders.objectfile.ObjectFile.readFile(ObjectFile.java:589)
at com.sun.j3d.loaders.objectfile.ObjectFile.load(ObjectFile.java:1248)
at com.sun.j3d.loaders.objectfile.ObjectFile.load(ObjectFile.java:676)
at test.ObjLoader.createSceneGraph(ObjLoader.java:102)
at test.ObjLoader.<init>(ObjLoader.java:132)
at test.ObjLoader.main(ObjLoader.java:143)
有使用过Java3D模型装载的兄弟们能不能帮帮我呢?

解决方案 »

  1.   

    Exception in thread "main" java.lang.IllegalArgumentException: Empty region!异常提示:region为空吧 是不是要定义region选项
      

  2.   


    我刚检查了一下,现在的模型有3类文件:
    .obj,.mtl和.tga
    .obj是模型本身
    .mtl是模型的贴图描述文件
    .tga是描述文件中引用的贴图图片上述异常好像是因为:
    1.虽然3D模型装载的时候.obj和.mtl文件是需要放在同一目录下,但是该目录有限制,目前我发现该目录只能是项目的根目录,甚至都不能是子文件夹下.如果是子文件夹,那么装载器是找不到.mtl文件的.(也不能设置路径)
    2.上述问题解决后,看那个异常:因为.tga文件的路径是默认在.mtl文件中定义,格式如下:newmtl Material_1
    Ka 0.7 0.7 0.7
    Kd 1 1 1
    Ks 0 0 0
    Ns 1
    map_Kd mac_2.tga乍看好像只用把tga文件也放在.mtl文件同一目录下就可以了,但是虽然是这样放置的,还是会抛出上述异常.
    于是,我修改了.mtl文件的内容,并将.tga文件放入了项目下的test目录下:newmtl Material_1
    Ka 0.7 0.7 0.7
    Kd 1 1 1
    Ks 0 0 0
    Ns 1
    map_Kd test/mac_2.tga再次运行的时候上述异常正常的解决了,但是新的问题又来了,产生了如下异常:Exception in thread "main" com.sun.j3d.utils.image.ImageException: javax.imageio.IIOException: Can't read input file!
    at com.sun.j3d.utils.image.TextureLoader$1.run(TextureLoader.java:306)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.j3d.utils.image.TextureLoader.<init>(TextureLoader.java:299)
    at com.sun.j3d.loaders.objectfile.ObjectFileMaterials.readMapKd(ObjectFileMaterials.java:305)
    at com.sun.j3d.loaders.objectfile.ObjectFileMaterials.readFile(ObjectFileMaterials.java:361)
    at com.sun.j3d.loaders.objectfile.ObjectFileMaterials.readMaterialFile(ObjectFileMaterials.java:408)
    at com.sun.j3d.loaders.objectfile.ObjectFile.loadMaterialFile(ObjectFile.java:525)
    at com.sun.j3d.loaders.objectfile.ObjectFile.readFile(ObjectFile.java:589)
    at com.sun.j3d.loaders.objectfile.ObjectFile.load(ObjectFile.java:1248)
    at com.sun.j3d.loaders.objectfile.ObjectFile.load(ObjectFile.java:676)
    at test.ObjLoader.createSceneGraph(ObjLoader.java:102)
    at test.ObjLoader.<init>(ObjLoader.java:132)
    at test.ObjLoader.main(ObjLoader.java:143)
    Caused by: javax.imageio.IIOException: Can't read input file!
    at javax.imageio.ImageIO.read(ImageIO.java:1275)
    at com.sun.j3d.utils.image.TextureLoader$1.run(TextureLoader.java:304)
    ... 12 more不能读取输入文件,这是为什么呢?有经验的帮忙解决下....
      

  3.   

    昨天下午后来又忙活了半天,希望找出问题所在.结果对照API发现有这么一个描述:map_Kd filenameTexture map. Supports .rgb, .rgba, .int, .inta, .sgi, and .bw files in addition to those supported by TextureLoader.然后上网搜罗了半天,一个个后缀的找.终于发现.sgi格式文件能由AcdSee直接转换,于是动手....
    并且把.mtl中的文件后缀由.tga改成了.sgi.
    终于....终于....
    不报错了.
    但是画面一片空白~~~
      

  4.   

    到达这步了,安心了不少.于是再次找原因.
    我的.mtl描述中有5个贴图文件,并且有2幅大图.
    于是我修改了.mtl文件中的内容,把贴图引用的.sgi文件改成了1幅并且该图片是一张小图.
    终于...我又重新看到了画面中的模型.
    并且现在,程序已经能正确的读取贴图文件,不抛出异常.然而我在窗口中法线了一些空白的区域,比对了一下和引用的贴图文件大小差不多,于是乎大胆假设,是不是引用的贴图文件存在问题,还是导出模型的时候贴图坐标转换发生了错误或者误差.导致了不能正常的贴图,后续的问题好像是3DMax和Maya相关的模型问题了,和Java程序的千丝万缕的联系已经到此结束了.
    还是谢谢大家,上面也是我解决遇到的这个问题的整个过程.
    好像关于这个问题现在暂时还没有资料,我也觉得整个过程挺恼人的,希望上面的文字对一些需要该类帮助的人们有所帮助.
    稍后放上成功载入的贴图....HoHo~~
      

  5.   

    是真的假的?AcdSee不能转出.sgi文件吧