快速在Android里面实现3D人物显示

一直在研究Android上实现女仆美豆酱(个人助理)的研究,在制作完毕短信和电话提醒功能后,希望可以实现3D人物的快速显示

至少可以独立显示模型及其动作,主要是因为前面两个功能制作的过程中发现图片太难获取了,没有美工没办法,故试试3D

1.查看一下现有的Android 3D库

主要的方向有两个,一个是用C扩展库调用,性能肯定是非常棒的,但是我不太会,只好现用Java封装的3D引擎,OK

于是选择了Min3D库来做试验品,最后的效果最低限度想达成软件あんどろいどたんjp.co.topgate.charactor.android_tan的

效果:

解包あんどろいどたん可知,这个软件是在C开源扩展https://github.com/eaglesakura/jointcoding的基础上写的,坑爹的是

这个库我没有完全编译成功,虽然库开源,但是其使用方法,如模型的打包、动作等的载入等没有完全明白,所以在持续

几天的研究之后,只能暂时放弃了。

关于あんどろいどたん的资料:

https://play.google.com/store/apps/details?id=jp.co.topgate.charactor.android_tan

http://moeapk.com/info/jp.co.topgate.charactor.android_tan

https://github.com/eaglesakura/jointcoding

http://eaglesakura.hatenablog.com/entry/2013/02/24/230128

http://d.hatena.ne.jp/eaglesakura/20100627/1277657026

トップゲート, 山下武志

2.Min3D测试

Min3D库https://code.google.com/p/min3d/,基于Android OpenGL ES 1.0,没有2.0,

1.先下载库代码:

svn checkouthttp://min3d.googlecode.com/svn/trunk/ min3d-read-only

下载这个也是折腾,最近网络管理比较厉害还是什么,先是用TortoiseSVN下载失败,再去Linux尝试直接命

令行,总之还是折腾到了代码,下载失败的同学可以找我

2.Sample

内部有两个文件夹,sample和src,安装其中编译好的实例min3dSampleProject1_020.apk ,真机运行看看

第一个是选择界面,二是OBJ模型的载入,三是嵌入式窗口的带入,以后也许可以用来把人物载入到悬浮窗内部

四是MD2动画格式模型,


在Eclipse里面新建一个工程com.example.mini3dobjtest来测试这两个模型,复制ExampleLoadObjFile.java 和

ExampleLoadMD2File.java 到mini3dobjTest\src\com\example\mini3dobjtest 路径下,加入到AndroidManifest.xml

复制min3d文件夹到你的工程文件夹里面,分别编译两个模型载入的APK,Copy模型及其图片资源到你的工程内部



运行之,成功

3.MMD模型的载入

Min3D库只支持三种模型,3ds,Obj,MD2,要模型动作就需要把PMD格式转换成MD2或者Obj

这里用Blender建模软件转换模型,Blender现在最新版本2.7.1,不过我这里用2.6.7版

解包blender_mmd_tools-0.4.5.zip,把mmd_tools文件夹复制到Blender路径下blender-2.67-windows32\2.67\scripts\addons\

重启Blender,在Blender中启用插件,查阅资料http://tieba.baidu.com/p/1954890397并参照视频成功导入了MMD模型

导入步骤错误的,或者模型太大,Blender就会卡住,如何区分呢?2.6.7版本启动Blender是有python窗口的,这个窗口里面可以查看载入以及导出的进度,故用此区分


导入模型的时候有几个要点

1.在左边的工具栏的MMD分栏里面选择GLSL模式

2.切换成日文版,工具什么的不需要

3.去掉导入时左下角的Rename Bones重命名骨骼的选项


这里用来实验的是nano改変亞北ネル PMX模型,Nano系列的模型都非常小巧,像这个只有50KB

导入模型之后右键选择人物的骨骼,注意,一点要选择骨骼再导入Vmd 动作文件!之前在这里被坑了很久

VMD文件这里也自己制作,因为导入其他动作有名字匹配问题,在MikuMikuDance里面载入模型,载入动作

再导出VMD动作文件,完毕之后用Blender载入vmd动作文件



4.OBJ MD2模型以及图片的导出

Blender默认支持Obj格式的导出,我这里用的导出选项如下,自己安装自己的喜好调节,不明白意思多调试几次来理解

导出MD2模型先右键选择人物模型,然后再导出,注意MD2支持的浮点数有限,数据过大的模型无法导出,还有一点十

分重要,有时候导出没问题但是没有显示,是因为大小问题,在代码里面带入要考虑到,Blender导出OBJ MD2用了1000

倍,调成1倍,导出MD2模型动画要勾选上 导出动画选项,导出的进度可以在Python窗口中查看的到


5.模型在工程里面载入

1.要注意的是OBJ在raw文件夹里面里面需要重命名,yabei.obj命名成yabei_obj,材质信息文件yabei.mtl命名成yabei_mtl

MD2文件不需要重命名直接使用即可

2.图片必须要全部导出到drawable文件夹中,并且用小写英文,所以你需要在Blender里面弄好,或者手动编辑材质文件

内部记录的图片名称成小写英文,还有就是不要用绝对路径,所有路径一概转换成文件名

6.编译,结束

修改好Java文件中使用的文件名称,编译运行完毕,即可



3.扩展 错误问题集中

以上工程的主要步骤就完毕了,实际会遇到很多错误、问题

1.一闪而过或者载入很久后弹出

模型载入失败,很有可能是名字错误,或者贴图错误,还有可能是模型太大,载入失败

要精确确认是哪一步载入错误,最快的办法就是根据Eclipse给出的错误提示在载入前在Log输出要载入的文件名字

根据错误回溯到模型载入的Min3D库Java文件并在其中加入Log语句即可

2.文件启动切换导致无法启动

在ExampleLoadMD2File和ExampleLoadObjFile之间切换启动文件的时候,完全卸载软件后再安装

连接Android真机运行 adb uninstall com.example.mini3dobjtest

3.屏幕一直黑,不显示模型

考虑你模型的位置以及大小在修正,一般取objModel.position().y = -2f 可以让人形模型在屏幕中间,即Y负两倍




更多相关文章

  1. Android与物联网设备通信-网络模型分层
  2. TensorFlow在Android平台上的安装和应用
  3. android微信聊天记录导出到电脑【微信安卓版技巧】
  4. android线程 Handler Message Queue AsyncTask线程模型 线程交互
  5. 【转】UML建模與Android應用程式開發(上)
  6. android 消费者和生产者的队列处理模型
  7. [Unity3D]Unity3D游戏开发之从Unity3D到Eclipse
  8. Android判断网络是否可用并且开启网络
  9. android 事件模型

随机推荐

  1. Android外挂多字幕开源库(Subtitle for An
  2. Android之TextView属性列表
  3. Android中的adapter
  4. Erlang实现的百度云推送Android服务端实
  5. Android的selector,背景选择器
  6. C#/IOS/Android通用加密解密方法
  7. Android动画效果-更新中
  8. Android应用开发之RelativeLayout (相对
  9. android 程序启动界面的短暂黑屏解决办法
  10. [Android]发布Sqlite数据库