fbxsdk 的 JNI 库

来源:互联网 发布:saber软件芯片tl494 编辑:程序博客网 时间:2024/06/13 21:57

fbxsdk是用来读写autodesk的fbx的库,但是是一个c++库,在java上无法直接使用,也没有找到有人做了这个工作,只好自己写一个jni的库

原理:


  1. 使用lynx从 http://docs.autodesk.com/FBX/2014/ENU/FBX-SDK-Documentation/cpp_ref/hierarchy.html 把文档抓下来,转成文件.
  2. 写了一个shell的脚本把转成普通文本的文档进行分析,找出类名,方法和属性,自动生成对应的cpp和java文件
  3. 手动修复少量的文档错误和增加一些辅助类的工具,加上文档中没有的枚举值
  4. 编写makefile,编译成JNI的动态库
  5. java程序开始时,加载一下System.loadLibrary("FbxsdkJni"), 然后就可以用了。



所有的类和结构转成了指针,然后转成java的long类型,要自己手动释放这些指针


代码在

https://github.com/aerror2/FbxsdkJNI



使用例子:


private long createSkeletonNode(long pScene, String name, long mt,double size, int type) {long lpSkeleton = FbxSkeleton.Create(pScene, name);FbxSkeleton.SetSkeletonType(lpSkeleton, type);FbxSkeleton.mepSetSize(lpSkeleton, size);long lSkeletonNode = FbxNode.Create(pScene, name);FbxNode.SetNodeAttribute(lSkeletonNode, lpSkeleton);long t = FbxAMatrix.GetT(mt);long r = FbxAMatrix.GetR(mt);long s = FbxAMatrix.GetS(mt);FbxNode.mepSetLclTranslation(lSkeletonNode, t);FbxNode.mepSetLclRotation(lSkeletonNode, r);FbxNode.mepSetLclScaling(lSkeletonNode, s);FbxVector4.meDestroy(t);FbxVector4.meDestroy(r);FbxVector4.meDestroy(s);return lSkeletonNode;}test(){  long mgr = FbxJnimgr.meCreate();    long lpScene = FbxJnimgr.GetScene(mgr);  long lpMesh = createFbxMesh(mgr,lpScene,meshData);    long famt = FbxAMatrix.meCreate();FbxAMatrix.SetTRS(famt, t1, r1, s1);        long lpRootNode = FbxScene.GetRootNode(lpScene);                        long  lSklNode = createSkeletonNode(pScene, n, famt, 100.0, FbxSkeleton.EType.eRoot);          FbxNode.AddChild(lpRootNode, lSklNode);            FbxJnimgr.SaveScene(mgr, lpScene, outputfileNanme);          FbxJnimgr.meDestroy(mgr);    }


0 0
原创粉丝点击