Программа просмотра Assimp работает намного быстрее, чем программа импорта Assimp C ++ для того же файла модели .obj.

Библиотека assimp предоставляет удобный способ загрузки 3D-моделей .obj из файла. Однако я обнаружил, что прилагаемый к нему assimp_viewer.exe (я использую версию 3.1.1) намного быстрее импортирует мой файл .obj (42 МБ, уже упрощенный), чем мой код C ++, который загружает ту же модель. Средство просмотра загружает файл за пару секунд, тогда как моей программе на C ++ (MSVS 2013 / Win64 / Release) для этого требуется 154 секунды. Я экспериментировал с флагами постобработки импортера как в программе просмотра, так и в C ++, но я не могу преодолеть разрыв между ними.

Есть мысли по поводу причины? Вот мой код на C ++:

#include <ctime>
#include <iostream>
#include <fstream>
#include <vector>

#include "assimp/Importer.hpp"
#include "assimp/scene.h"
#include "assimp/postprocess.h"
#include "assimp/progresshandler.hpp"

using namespace std;

int main(int argc, char* argv[])
{
    Assimp::Importer importer;
    unsigned int post_processing_flags = aiProcess_Triangulate | aiProcess_SortByPType | aiProcess_JoinIdenticalVertices |
            aiProcess_OptimizeMeshes | aiProcess_OptimizeGraph | aiProcess_ImproveCacheLocality;

    cout << "starting load: ";

    auto begin = clock();
    auto scene = importer.ReadFile( "MODEL.obj", post_processing_flags);
    auto end = clock();

    cout << "done!\n";

    double seconds = (end - begin) / CLOCKS_PER_SEC;

    cout << "loading took " << seconds << " seconds" << endl;

    return 0;
}

person RevJohn    schedule 05.09.2016    source источник
comment
Вы компилируете свою программу в режиме выпуска? Похоже, что библиотека основана на заголовках, поэтому конфигурация компиляции вашей программы повлияет на нее.   -  person michalsrb    schedule 05.09.2016
comment
Также проверьте уровень оптимизации вашего компилятора, это значительно сокращает время загрузки и время синтаксического анализа. Попробуйте с оптимизацией -O3 или лучше.   -  person codetiger    schedule 05.09.2016


Ответы (1)


Нашел свой ответ: я запускаю его в Visual Studio, но запускаю его с отладчиком в режиме выпуска (F5). Когда я запускаю его без отладки (CTRL + F5), загрузка модели занимает 1 секунду, как это делает программа просмотра assimp. То же самое применимо, если вы запускаете исполняемый файл вне Visual Studio с помощью проводника файлов или командной строки. Тем не менее огромная разница между с отладкой и без нее.

person RevJohn    schedule 06.09.2016