#include "SDK_Utility.h"
int gCubeNumber = 1;
int gCubeRotationAxis = 1;
double gCubeXPos = 0.0;
double gCubeYPos = 20.0;
double gCubeZPos = 0.0;
#ifdef IOS_REF
#undef IOS_REF
#define IOS_REF (*(pSdkManager->GetIOSettings()))
#endif
{
if( !pManager )
{
FBXSDK_printf("Error: Unable to create FBX Manager!\n");
exit(1);
}
else FBXSDK_printf(
"Autodesk FBX SDK version %s\n", pManager->
GetVersion());
pScene = FbxScene::Create(pManager, "My Scene");
if( !pScene )
{
FBXSDK_printf("Error: Unable to create FBX scene!\n");
exit(1);
}
return true;
}
void DestroySdkObjects(
FbxManager* pManager,
bool pExitStatus)
{
if( pManager ) pManager->
Destroy();
if( pExitStatus ) FBXSDK_printf("Program Success!\n");
}
bool CreateScene()
{
if(InitializeSdkObjects(gSdkManager, gScene) == false)
{
return false;
}
FbxAnimStack* lAnimStack = FbxAnimStack::Create(gScene,
"Animation stack camera animation");
gAnimLayer = FbxAnimLayer::Create(gScene, "Base Layer");
FbxNode* lMarker = CreateMarker(gScene,
"Marker");
FbxNode* lCamera = CreateCamera(gScene,
"Camera");
CreateTexture(gScene);
CreateMaterial(gScene);
SetCameraPointOfInterest(lCamera, lMarker);
SetMarkerDefaultPosition(lMarker);
SetCameraDefaultPosition(lCamera);
AnimateCamera(lCamera, gAnimLayer);
return true;
}
void CreateCube(bool pWithTexture, bool pAnimate)
{
CreateCubeDetailed( lCubeName.
Buffer(),
gCubeXPos,
gCubeYPos,
gCubeZPos,
gCubeRotationAxis,
pWithTexture,
pAnimate
);
gCubeNumber++;
if(gCubeXPos >= 0.0)
{
gCubeXPos += 50.0;
gCubeXPos *= -1.0;
gCubeRotationAxis++;
}
else
{
gCubeXPos *= -1.0;
}
gCubeYPos += 30.0;
if(gCubeRotationAxis > 2) gCubeRotationAxis = 0;
}
void RemoveCubes()
{
if(gSdkManager ==
NULL)
return;
if(nc <= 3) return;
for(int i=nc-1; i >= 3; i--)
{
{
}
}
SetInitialCubeData();
}
void CreateCubeDetailed( char* pCubeName,
double pX,
double pY,
double pZ,
int pRotateAxe,
bool pWithTexture,
bool pAnimate
)
{
FbxNode* lCube = CreateCubeMesh(gScene, pCubeName);
if(pAnimate)
{
AnimateCube(lCube, gAnimLayer, pRotateAxe);
}
if(pWithTexture)
{
}
}
bool Export(
const char* pFilename,
int pFileFormat
)
{
return SaveScene(gSdkManager, gScene, pFilename, pFileFormat, true);
}
bool SaveScene(
FbxManager* pSdkManager,
FbxDocument* pScene,
const char* pFilename,
int pFileFormat,
bool pEmbedMedia)
{
if(pSdkManager ==
NULL)
return false;
if(pScene ==
NULL)
return false;
if(pFilename ==
NULL)
return false;
bool lStatus = true;
FbxExporter* lExporter = FbxExporter::Create(pSdkManager,
"");
{
if (!pEmbedMedia)
{
for (lFormatIndex=0; lFormatIndex<lFormatCount; lFormatIndex++)
{
{
char *lASCII = "ascii";
if (lDesc.
Find(lASCII)>=0)
{
pFileFormat = lFormatIndex;
break;
}
}
}
}
}
{
return false;
}
lStatus = lExporter->
Export(pScene);
return lStatus;
}
const char *GetWriterSFNFilters()
{
int i=0;
for(i=0; i < nbWriters; i++)
{
GetWriterFormatDescription(i);
s += "|*.";
GetWriterFormatExtension(i);
s += "|";
}
int nbChar = int(strlen(s.
Buffer())) + 1;
char *filter = new char[ nbChar ];
memset(filter, 0, nbChar);
FBXSDK_strcpy(filter, nbChar, s.
Buffer());
for(i=0; i < int(strlen(s.
Buffer())); i++)
{
if(filter[i] == '|')
{
filter[i] = 0;
}
}
return filter;
}
const char *GetFileFormatExt(
const int pWriteFileFormat
)
{
char *buf = new char[10];
memset(buf, 0, 10);
buf[0] = '.';
GetWriterFormatExtension(pWriteFileFormat);
FBXSDK_strcat(buf, 10, ext);
return buf;
}
{
}
const char * GetRootNodeName()
{
}
{
{
s += " (No node attribute type)";
}
else
{
switch (lAttributeType)
{
}
}
return s;
}
)
{
v4 = ((
FbxNode*)pNode)->LclTranslation.Get();
}
{
bool lTextureExist = false;
if( lMaterialCount > 0)
{
for( int i = 0; i < lMaterialCount; ++i)
{
{
lTextureExist = true;
break;
}
}
}
if( lTextureExist) s+= "[Texture: Yes] ";
else s+= "[Texture: No] ";
bool anim = false;
lCurveNode =((
FbxNode* )pNode)->LclRotation.GetCurveNode(gAnimLayer);
if(lCurveNode !=
NULL) anim =
true;
lCurveNode = ((
FbxNode* )pNode)->LclTranslation.GetCurveNode(gAnimLayer);
if(lCurveNode !=
NULL) anim =
true;
if(anim == true)
{
s+= "[Animation: Yes] ";
}
else
{
s+= "[Animation: No] ";
}
return s;
}
{
FbxMarker* lMarker = FbxMarker::Create(pScene,pName);
FbxNode* lNode = FbxNode::Create(pScene,pName);
return lNode;
}
{
FbxCamera* lCamera = FbxCamera::Create(pScene,pName);
FbxNode* lNode = FbxNode::Create(pScene,pName);
return lNode;
}
void SetCameraPointOfInterest(
FbxNode* pCamera,
FbxNode* pPointOfInterest)
{
}
void SetMarkerDefaultPosition(
FbxNode* pMarker)
{
}
void SetCameraDefaultPosition(
FbxNode* pCamera)
{
}
{
int lKeyIndex = 0;
if (lCurve)
{
lKeyIndex = lCurve->
KeyAdd(lTime);
lKeyIndex = lCurve->
KeyAdd(lTime);
}
if (lCurve)
{
lKeyIndex = lCurve->
KeyAdd(lTime);
lKeyIndex = lCurve->
KeyAdd(lTime);
}
}
{
int lKeyIndex = 0;
if (lCurve)
{
lKeyIndex = lCurve->
KeyAdd(lTime);
lKeyIndex = lCurve->
KeyAdd(lTime);
}
}
{
int i, j;
FbxMesh* lMesh = FbxMesh::Create(pScene,pName);
lControlPoints[0] = lControlPoint0;
lControlPoints[1] = lControlPoint1;
lControlPoints[2] = lControlPoint2;
lControlPoints[3] = lControlPoint3;
lControlPoints[4] = lControlPoint1;
lControlPoints[5] = lControlPoint5;
lControlPoints[6] = lControlPoint6;
lControlPoints[7] = lControlPoint2;
lControlPoints[8] = lControlPoint5;
lControlPoints[9] = lControlPoint4;
lControlPoints[10] = lControlPoint7;
lControlPoints[11] = lControlPoint6;
lControlPoints[12] = lControlPoint4;
lControlPoints[13] = lControlPoint0;
lControlPoints[14] = lControlPoint3;
lControlPoints[15] = lControlPoint7;
lControlPoints[16] = lControlPoint3;
lControlPoints[17] = lControlPoint2;
lControlPoints[18] = lControlPoint6;
lControlPoints[19] = lControlPoint7;
lControlPoints[20] = lControlPoint1;
lControlPoints[21] = lControlPoint0;
lControlPoints[22] = lControlPoint4;
lControlPoints[23] = lControlPoint5;
int lPolygonVertices[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,12, 13,
14, 15, 16, 17, 18, 19, 20, 21, 22, 23 };
FBX_ASSERT( lUVDiffuseElement !=
NULL);
for(i = 0; i < 6; i++)
{
for(j = 0; j < 4; j++)
{
}
}
FbxNode* lNode = FbxNode::Create(pScene,pName);
return lNode;
}
{
gTexture = FbxFileTexture::Create(pScene,"Diffuse Texture");
FbxString lTexPath = gAppPath ? *gAppPath +
"\\Crate.jpg" :
"";
}
{
gMaterial = FbxSurfacePhong::Create(pScene, lMaterialName.
Buffer());
gMaterial->
Diffuse .Set(lDiffuseColor);
if (gTexture)
gMaterial->
Diffuse.ConnectSrcObject(gTexture);
}
{
return;
for(int i=0; i<6; ++i)
}
void SetInitialCubeData()
{
gCubeNumber = 1;
gCubeRotationAxis = 1;
gCubeXPos = 0.0;
gCubeYPos = 20.0;
gCubeZPos = 0.0;
}