Java3D加载obj文件+mtl文件

  • Post author:
  • Post category:java


Java3d入门学习可以参考这位博主大神——苏若年,关于Java3D学习的文章。下面给出他部分文章的链接:

文1 创建三维几何模型:[ http://www.cnblogs.com/dennisit/archive/2013/05/06/3063042.html ]

文2 加载外部Obj模型:[ http://www.cnblogs.com/dennisit/archive/2013/05/07/3065126.html ]

文3 载入外部3ds模型:[ http://www.cnblogs.com/dennisit/archive/2013/05/07/3065479.html ]

本来按照苏若年大神的文章以及足够将两种模型都用Java3D显示出来了,但文章给出的显现效果是不含纹理的,而项目需要生成含纹理的3D模型。因此,本文的重点主要在载入纹理上,算是对苏若年大神文章的小小补充吧。

加载含纹理的Obj模型,正确的做法是

将.obj文件及其相应的.mtl文件和纹理贴图放在同一目录下

上面这段话是来自

slheluo

所写的

Java3D导入obj和3ds模型整理

但是我按照两位博主所说仍然没有出纹理,我这找到两个问题原因:


一、路径格式不对,根本未找到mtl文件



因为我之前并没有接触过Java3D,只是有人让我解决加载不出来纹理这个问题我才来看的,所以加载外部obj模型我是完全复制的苏若年大神的文2来写的代码,其中问题点就是他代码中路径

//加载Obj格式的模型文件
objTrans.addChild(new ObjFileReader("F:/guanyu.obj"));

在我调试看来,Java3D在加载模型时,ObjectFile会根据模型文件的路径获取一个basePath的目录路径,看图中File.separator代表的是

\或者\\

,如果在路径中使用的是

/


,当lastIndexof找不到\或\\于是就返回-1,从而取得的路径



就不对,因此读取mtl文件时找不到路径,出现异常直接return。归根结底就根本没有读到mtl文件怎么能加载出来纹理

图1


解决办法:

将路径中的“/”改为“\\”


二、mtl文件中没有 illum 1


Java3D在描画mtl时,如果mtl文件中没有 illum,则创建对象的时候默认值为0,那么便执行setLightingEnable(false)


解决办法:每一个mtl下都加上illum,简单粗暴



版权声明:本文为qq_40594137原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。