捣鼓了快一个月FBX SDK.终于看到些适合我的东西了...在SDK上找到了一段代码,比较入门.简单改一下风格,就是我的作品了...接下来循序渐进地学习吧.直接这么copy代码是不是有点不好?也没什么,反正也没什么,....
// UseFBXSDK.cpp -- 2014/01/15-21:36 #include "stdafx.h" #include <fbxsdk.h> int numTabs = 0; void PrintTabs() { for(int i = 0; i < numTabs; i++) printf("\t"); } FbxString GetAttributeTypeName(FbxNodeAttribute::EType type) { switch(type) { case FbxNodeAttribute::eUnknown: return "unidentified"; case FbxNodeAttribute::eNull: return "null"; case FbxNodeAttribute::eMarker: return "marker"; case FbxNodeAttribute::eSkeleton: return "skeleton"; case FbxNodeAttribute::eMesh: return "mesh"; case FbxNodeAttribute::eNurbs: return "nurbs"; case FbxNodeAttribute::ePatch: return "patch"; case FbxNodeAttribute::eCamera: return "camera"; case FbxNodeAttribute::eCameraStereo: return "stereo"; case FbxNodeAttribute::eCameraSwitcher: return "camera switcher"; case FbxNodeAttribute::eLight: return "light"; case FbxNodeAttribute::eOpticalReference: return "optical reference"; case FbxNodeAttribute::eOpticalMarker: return "marker"; case FbxNodeAttribute::eNurbsCurve: return "nurbs curve"; case FbxNodeAttribute::eTrimNurbsSurface: return "trim nurbs surface"; case FbxNodeAttribute::eBoundary: return "boundary"; case FbxNodeAttribute::eNurbsSurface: return "nurbs surface"; case FbxNodeAttribute::eShape: return "shape"; case FbxNodeAttribute::eLODGroup: return "lodgroup"; case FbxNodeAttribute::eSubDiv: return "subdiv"; default: return "unknown"; } } void PrintAttribute(FbxNodeAttribute* pAttribute) { if(pAttribute == nullptr) return; FbxString typeName = GetAttributeTypeName(pAttribute->GetAttributeType()); FbxString attrName = pAttribute->GetName(); PrintTabs(); printf("<attribute type='%s' name='%s'/>\n", typeName.Buffer(), attrName.Buffer()); } void PrintNode(FbxNode* pNode) { PrintTabs(); const char* nodeName = pNode->GetName(); FbxDouble3 translation = pNode->LclTranslation.Get(); FbxDouble3 rotation = pNode->LclRotation.Get(); FbxDouble3 scaling = pNode->LclScaling.Get(); printf("<node name='%s' translation='(%f, %f, %f)' rotation='(%f, %f, %f)' scaling='(%f, %f, %f)'>\n", nodeName, translation[0], translation[1], translation[2], rotation[0], rotation[1], rotation[2], scaling[0], scaling[1], scaling[2] ); numTabs++; for(int i = 0; i < pNode->GetNodeAttributeCount(); i++) PrintAttribute(pNode->GetNodeAttributeByIndex(i)); for(int j = 0; j < pNode->GetChildCount(); j++) PrintNode(pNode->GetChild(j)); numTabs--; PrintTabs(); printf("</node>\n"); } int main(int argc, char** argv) { const char* pFilename = "humanoid.fbx"; FbxManager* pSdkManager = FbxManager::Create(); FbxIOSettings *pIOSettings = FbxIOSettings::Create(pSdkManager, IOSROOT); pSdkManager->SetIOSettings(pIOSettings); FbxImporter* lImporter = FbxImporter::Create(pSdkManager,""); if(lImporter->Initialize(pFilename, -1, pSdkManager->GetIOSettings()) == nullptr) { printf("Call to FbxImporter::Initialize() failed.\n"); printf("Error returned: %s\n\n", lImporter->GetStatus().GetErrorString()); getchar() ; exit(-1); } FbxScene* pScene = FbxScene::Create(pSdkManager,"myScene"); lImporter->Import(pScene); lImporter->Destroy(); FbxNode* pRootNode = pScene->GetRootNode(); if(pRootNode != NULL) { for(int i = 0; i < pRootNode->GetChildCount(); i++) PrintNode(pRootNode->GetChild(i)); } pSdkManager->Destroy(); getchar() ; return 0; }