美文网首页
Import内部处理

Import内部处理

作者: 诸事圆成 | 来源:发表于2021-03-04 09:35 被阅读0次
//-------------------------------------------------------------------------------
// Entry point for the loader thread
// The loader thread loads the asset while the progress dialog displays the
// smart progress bar
//-------------------------------------------------------------------------------
DWORD WINAPI LoadThreadProc(LPVOID lpParameter) {
    UNREFERENCED_PARAMETER(lpParameter);

    // get current time
    double fCur = (double)timeGetTime();

    aiPropertyStore *props = aiCreatePropertyStore();
    aiSetImportPropertyInteger(props, AI_CONFIG_IMPORT_TER_MAKE_UVS, 1);
    aiSetImportPropertyFloat(props, AI_CONFIG_PP_GSN_MAX_SMOOTHING_ANGLE, g_smoothAngle);
    aiSetImportPropertyInteger(props, AI_CONFIG_PP_SBP_REMOVE, nopointslines ? aiPrimitiveType_LINE | aiPrimitiveType_POINT : 0);

    aiSetImportPropertyInteger(props, AI_CONFIG_GLOB_MEASURE_TIME, 1);
    //aiSetImportPropertyInteger(props,AI_CONFIG_PP_PTV_KEEP_HIERARCHY,1);

    // Call ASSIMPs C-API to load the file
    g_pcAsset->pcScene = (aiScene *)aiImportFileExWithProperties(g_szFileName,
            ppsteps | /* configurable pp steps */
                    aiProcess_GenSmoothNormals | // generate smooth normal vectors if not existing
                    aiProcess_SplitLargeMeshes | // split large, unrenderable meshes into submeshes
                    aiProcess_Triangulate | // triangulate polygons with more than 3 edges
                    aiProcess_ConvertToLeftHanded | // convert everything to D3D left handed space
                    aiProcess_SortByPType | // make 'clean' meshes which consist of a single typ of primitives
                    0,
            nullptr,
            props);

    aiReleasePropertyStore(props);

    // get the end time of zje operation, calculate delta t
    double fEnd = (double)timeGetTime();
    g_fLoadTime = (float)((fEnd - fCur) / 1000);
    g_bLoadingFinished = true;

    // check whether the loading process has failed ...
    if (nullptr == g_pcAsset->pcScene) {
        CLogDisplay::Instance().AddEntry("[ERROR] Unable to load this asset:",
                D3DCOLOR_ARGB(0xFF, 0xFF, 0, 0));

        // print ASSIMPs error string to the log display
        CLogDisplay::Instance().AddEntry(aiGetErrorString(),
                D3DCOLOR_ARGB(0xFF, 0xFF, 0, 0));
        return 1;
    }

    return 0;
}

相关文章

网友评论

      本文标题:Import内部处理

      本文链接:https://www.haomeiwen.com/subject/gsrttltx.html