fbxsdk 的 JNI 库

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值