Как экспортировать FbxLine с помощью Fbx SDK - PullRequest
0 голосов
/ 03 июля 2019

Мое приложение C ++ может экспортировать объект FbxMesh очень хорошо.Сетки отображаются в нескольких разных средствах просмотра (MS 3D Viewer, FDX Review AutoDesk, SAP 3D Viewer).Я экспортирую объект FbxLine, в котором нет ошибок в коде, но они не отображаются ни в одном из этих средств просмотра.

Я могу видеть узлы Линии в списке объектов средства просмотра, но не фактическую строку.Я дал цвет линии (красный), думая, что он настроен на цвет фона, но безрезультатно.

Если я экспортирую в текстовый файл FBX, я могу увидеть определение для строки.

На форуме справки AutoDesk есть одно сообщение (http://help.autodesk.com/view/FBX/2019/ENU/?caas=caas/discussion/t5/FBX-Forum/How-to-Export-FbxLine-structure-/td-p/7749696.html),, но мой код выполняет все эти шаги.

//This is the important calls I make to try and export a FbxLine object
m_fbxSdkManager = FbxManager::Create();
FbxIOSettings *theIOSettings = FbxIOSettings::Create( m_fbxSdkManager, IOSROOT );
m_fbxSdkManager->SetIOSettings(theIOSettings);
m_fbxScene = FbxScene::Create( m_fbxSdkManager, "ExportScene" );


FbxNode* theRootNode = m_fbxScene->GetRootNode();
FbxNode* fbxNode = FbxNode::Create( m_fbxSdkManager, "LineNode");
if(fbxNode)
{
    for ( const auto& theLine : aLineList )
    {
        FbxLine* fbxLine = FbxLine::Create( m_fbxScene, "Line" );
        if(fbxLine)
        {
            //which call  to use???
            //FbxNodeAttribute* OldNode =  fbxNode->SetNodeAttribute(fbxLine);
            //or  this one, as shown in the sdk documentation
            FbxStatus pStatus;
            bool OK = fbxNode->AddNodeAttribute( fbxLine, &pStatus );
        //Always returns ok == true

            uint32 NumPoints = theLine.size();

            fbxLine->InitControlPoints(NumPoints);
            fbxLine->SetIndexArraySize(NumPoints);
            fbxLine->Color = FbxDouble3(1.0, 0.0, 0.0);

        for ( uint32 kk = 0; kk < NumPoints; ++kk )
        {
                 FbxVector4 pCtrlPoint = 
                 ToFbxPoint(theLine.getVertex(kk)); 
                 //ToFbxPointadds vetrices base on Z-UP or Y-UP orientation
                 fbxLine->SetControlPointAt(pCtrlPoint , kk);
                 fbxLine->SetPointIndexAt(kk, kk, kk == (NumPoints-1) );
                 //last point is marked as an end point by sending TRUE
             }
          }
       }
     }

     theRootNode->AddChild(fbxNode);
     ///....snip

// Create an exporter.
theExporter = FbxExporter::Create( m_fbxSdkManager, "" );
// Set any IO settings that may need to be adjusted.
FbxIOSettings* ios = m_fbxSdkManager->GetIOSettings();
if (nullptr != ios)
{
   ios->SetBoolProp( EXP_FBX_EMBEDDED, aOpts.m_embedTexture );
}

// Initialize the exporter by providing a filename.
if ( theExporter->Initialize( mFilename, aOpts.m_exportFormat, ios ) )
{
    isOK = theExporter->Export( m_fbxScene );
}

Я ожидаю увидеть строку в FBXОднако в средстве просмотра они не отображаются. Сетки, которые я экспортирую, отображаются нормально. В качестве обходного пути я могу экспортировать линии в виде сетки, но я не должен был этого делать!

...