Java3D导入obj和3ds模型整理

最近由于项目的原因,需要使用Java进行3D建模。Java3D是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模型及纹理:

文2中给出的代码实际上是可以保证导入Obj文件同时加载纹理的,只不过对Obj文件有一定的要求。Java3D可以导入的含纹理的Obj模型,其格式为Wavefront obj。(不保证其它格式的文件也可以)这种文件除了有一个模型文件.obj外,还含有纹理文件.mtl以及相应的各种格式的纹理图片。这样的Obj模型可以通过maya生成。

模型.obj文件除模型本身数据外,还会指定纹理文件.mtl的路径,关键字为mtllib。纹理文件.mtl中也会包含纹理图片的路径,也就是这个路径会误导使用者,使得得到的模型无法载入纹理,其问题的原因在与Java3d加载Obj的类——ObjectFile。

在加载模型时,ObjectFile会根据模型文件的路径获取一个basedir目录路径,这个目录路径会同时用在解析.obj文件和.mtl文件中,也就是说在解析这两个文件时,文件路径解析的结果是basedir+文件名。这就导致一个问题,当.obj文件、.mtl文件以及纹理贴图不在同一个目录时,是无法加载纹理的。换句话说,这两个文件的路径是失效的,只要文件名有效。有兴趣的朋友可以打开.obj文件和.mtl文件看一下,设置文件的路径,然后在程序中进行调试看看。

加载含纹理的Obj模型,正确的做法是将.obj文件及其相应的.mtl文件和纹理贴图放在同一目录下

效果图:
plane

———————————————————————————————————————————————————————
加载3ds模型及纹理:

使用文3中的代码及配置,但是需要再添加一个jar文件——StarfireExt.jar(eclipse导入jar不明白可以问问度娘)。然后把代码里导入的类进行替换,
“import com.microcrowd.loader.java3d.max3ds.Loader3DS;”换成“import com.mnstarfire.loaders3d.Loader3DS;”。模型文件和纹理贴图还是要放在一起。

效果图:
ship

注意3ds文件可能较大,导入后,程序不报错,但界面显示全是背景颜色,注意对导入的数据进行缩放变换。

附上StarfireExt.jar的下载链接:
http://pan.baidu.com/s/1miq7SDU

————————————————————————————————————————————————————————
Java3D实际上是一门过时的技术,也已经被sun公司抛弃,在国内研究地很少,资料也很少。有兴趣深入学习的朋友可以翻墙看看YouTube,上面有别人做的Java3D项目,很多附有源码;觉得太老,想尝新的朋友可以学学OpenGL和Unity3d,都是可以支持java的。

  • 7
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值