Из вышесказанного вытекают основные направления дальнейших исследований:
- поддержка работы алгоритма с библиотекой трехмерных моделей
- оценка эффективности алгоритма на моделях из этой библиотеки (различной сложности, конфигураций и т. п.)
Для выполнения этих целей было решено написать программу-конвертор трехмерных объектов в формат входных данных программы lfm_process. Конвертирование производится посредством эмуляции трехмерного сканирования (фотографирования). Однако это исследование приостановилось из-за проблем с форматом файлов описания геометрии модели, а также калибрационных файлов (файлов, используемых для соотнесения геометрии модели и её фотографий).
Литература
1. Э. Эйнджел. Интерактивная компьютерная графика. Вводный курс на базе OpenGL: Пер. с англ. – М.: Издательский дом "Вильямс", 2001.
2. М. Ву, Дж. Нейдер, Т. Девис, Д. Шрайнер. OpenGL. Официальное руководство программиста: Пер. с англ. – СПб: ООО «ДиаСофтЮП», 2002.
3. Интернет-сайт Sourceforge http://www.sourceforge.net/projects/openlf
4. Интернет-сайт Romulus 2
http://www.romulus2.com/articles/guides/lfm/lfm1.htm
Благодарности
Автор также выражает благодарность следующим людям, без которых данная работа не была бы возможна: С. Молинову, А. Жиркову, А. Игнатенко и Д. Першакову, Вэй-Хао Чену (Wei-Chao Chen).
Приложение 1.
char basefname[256];
char outfname[256];
switch (lopts->decomposition_type)
{
case LFMfactor4Vertex:
cout<<"Calculating Factor4-Vertex\n"; cout.flush();
sprintf(basefname, "%s\trimat_#####.mat", lopts->location_textures.c_str());
sprintf(outfname, "%s\factor4_vert_#####.mat", lopts->directory.c_str());
break;
case LFMsvdVertex:
cout<<"Calculating SVD-Vertex\n"; cout.flush();
sprintf(basefname, "%s\trimat_#####.mat", lopts->location_textures.c_str());
sprintf(outfname, "%s\svd_vert_#####.mat", lopts->directory.c_str());
break;
case LFMnmfVertex:
cout<<"Calculating NMF-Vertex\n"; cout.flush();
sprintf(basefname, "%s\trimat_#####.mat", lopts->location_textures.c_str());
sprintf(outfname, "%s\nmf_vert_#####.mat", lopts->directory.c_str());
break;
default:
return 1;
}
LFMDecomp decomp(sdf, calibs, lopts, basefname, outfname);
decomp.Init();
decomp.run();