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文件怎么能加载出来纹理
解决办法:
将路径中的“/”改为“\\”
二、mtl文件中没有 illum 1
Java3D在描画mtl时,如果mtl文件中没有 illum,则创建对象的时候默认值为0,那么便执行setLightingEnable(false)
解决办法:每一个mtl下都加上illum,简单粗暴