3

Autodesk FBX SDK2013 を使用して FBX モデルをロードします。モデルは既定で X 軸で 90 度回転します。

SDK は次のメソッドを提供します。

FbxAxisSystem::OpenGL.ConvertScene(scene);

軸変換を実行しますが、機能しません。それを呼び出しても何も変わりません。さらに、FBX エクスポーターはデフォルトで OpenGL 右手システムを使用しているようです。少なくとも、インポート時には次のように表示されます。

     FbxAxisSystem fbxAxis = scene->GetGlobalSettings().GetAxisSystem();

            if (fbxAxis != FbxAxisSystem::OpenGL)
            {
                      //....
            }

false を返します。だから私は理解していません;それがOpenGLの場合(右利きのシステムの場合、モデルのZ軸が上になっているのはなぜですか?それはSDKのバグですか?

4

1 に答える 1

4

私はついに解決策を見つけました.ここの誰かが実際に ConvertScene() は頂点配列に影響を与えず、ノードのグローバル/ローカルマトリックスを設定すると言いました.これらを使用して、ノードジオメトリまたは頂点を変換できます.

だからここでそれがどのように行われるか:

    FbxMatrix globalTransform = mesh->GetNode()->GetScene()->GetEvaluator()->GetNodeGlobalTransform( mesh->GetNode());
dvec4 c0 =  glm::make_vec4((double*)  globalTransform.GetColumn(0).Buffer());
dvec4 c1 =  glm::make_vec4((double*) globalTransform.GetColumn(1).Buffer());
dvec4 c2 =  glm::make_vec4((double*) globalTransform.GetColumn(2).Buffer());
dvec4 c3 =  glm::make_vec4((double*) globalTransform.GetColumn(3).Buffer());
glm::mat4 convertMatr =mat4(c0,c1,c2,c3);
convertMatr = inverse(convertMatr); //need to inverse otherwise the model is upside down

次に、convertMatr を使用してメッシュの頂点を変換します。Autodesk フォーラムはあまり反応がよくないので、どなたにも役立つことを願っています。

于 2013-08-10T11:46:24.203 に答える