#include "../Common/Common.h"
#define SAMPLE_FILENAME "Normals.fbx"
void GetSmoothing(
FbxManager* pSdkManager,
FbxNode* pNode,
bool pCompute =
false,
bool pConvertToSmoothingGroup =
false);
static bool gVerbose = true;
int main(int argc, char** argv)
{
bool lResult;
InitializeSdkObjects(lSdkManager, lScene);
for( int i = 1, c = argc; i < c; ++i )
{
if(
FbxString(argv[i]) ==
"-test" ) gVerbose =
false;
else if( lFilePath.IsEmpty() ) lFilePath = argv[i];
}
if( lFilePath.IsEmpty() ) lFilePath = SAMPLE_FILENAME;
FBXSDK_printf("\n\nFile: %s\n\n", lFilePath.Buffer());
lResult = LoadScene(lSdkManager, lScene, lFilePath.Buffer());
if(lResult == false)
{
FBXSDK_printf("\n\nAn error occurred while loading the scene...");
}
else
{
if(!lScene)
{
FBX_ASSERT_NOW("null scene");
}
GetNormals(lRootNode);
bool lComputeFromNormals = false;
bool lConvertToSmoothingGroup = false;
GetSmoothing(lSdkManager, lRootNode, lComputeFromNormals, lConvertToSmoothingGroup);
}
DestroySdkObjects(lSdkManager, lResult);
return 0;
}
void GetSmoothing(
FbxManager* pSdkManager,
FbxNode* pNode,
bool pCompute,
bool pConvertToSmoothingGroup)
{
if(!pNode || !pSdkManager)
return;
if(lMesh)
{
FBXSDK_printf(
"current mesh node: %s\n", pNode->
GetName());
if(pCompute)
{
lGeometryConverter.ComputeEdgeSmoothingFromNormals(lMesh);
if(pConvertToSmoothingGroup)
lGeometryConverter.ComputePolygonSmoothingFromEdgeSmoothing(lMesh);
}
if(lSmoothingElement)
{
{
{
int lSmoothingIndex = 0;
lSmoothingIndex = lEdgeIndex;
lSmoothingIndex = lSmoothingElement->
GetIndexArray().GetAt(lEdgeIndex);
int lSmoothingFlag = lSmoothingElement->
GetDirectArray().GetAt(lSmoothingIndex);
if( gVerbose ) FBXSDK_printf("hard/soft value for edge[%d]: %d \n", lEdgeIndex, lSmoothingFlag);
}
}
{
for(
int lPolygonIndex = 0; lPolygonIndex < lMesh->
GetPolygonCount(); lPolygonIndex++)
{
int lSmoothingIndex = 0;
lSmoothingIndex = lPolygonIndex;
lSmoothingIndex = lSmoothingElement->
GetIndexArray().GetAt(lPolygonIndex);
int lSmoothingFlag = lSmoothingElement->
GetDirectArray().GetAt(lSmoothingIndex);
if( gVerbose ) FBXSDK_printf("smoothing group ID for polygon[%d]: %d \n", lPolygonIndex, lSmoothingFlag);
}
}
}
}
for (i = 0; i < lCount; i++)
{
GetSmoothing(pSdkManager, pNode->
GetChild(i), pCompute, pConvertToSmoothingGroup);
}
}
{
if(!pNode)
return;
if(lMesh)
{
FBXSDK_printf(
"current mesh node: %s\n", pNode->
GetName());
if(lNormalElement)
{
{
{
int lNormalIndex = 0;
lNormalIndex = lVertexIndex;
lNormalIndex = lNormalElement->
GetIndexArray().GetAt(lVertexIndex);
FbxVector4 lNormal = lNormalElement->GetDirectArray().GetAt(lNormalIndex);
if( gVerbose ) FBXSDK_printf("normals for vertex[%d]: %f %f %f %f \n", lVertexIndex, lNormal[0], lNormal[1], lNormal[2], lNormal[3]);
}
}
{
int lIndexByPolygonVertex = 0;
for(
int lPolygonIndex = 0; lPolygonIndex < lMesh->
GetPolygonCount(); lPolygonIndex++)
{
for(int i = 0; i < lPolygonSize; i++)
{
int lNormalIndex = 0;
lNormalIndex = lIndexByPolygonVertex;
lNormalIndex = lNormalElement->GetIndexArray().GetAt(lIndexByPolygonVertex);
FbxVector4 lNormal = lNormalElement->GetDirectArray().GetAt(lNormalIndex);
if( gVerbose ) FBXSDK_printf("normals for polygon[%d]vertex[%d]: %f %f %f %f \n",
lPolygonIndex, i, lNormal[0], lNormal[1], lNormal[2], lNormal[3]);
lIndexByPolygonVertex++;
}
}
}
}
}
for (i = 0; i < lCount; i++)
{
}
}