В аттаче версии с загрузкой полных моделей. Можно загружать him, sim, так-же и отдельные меши (msh). Меши могут быть как бинарные, так и текстовые.
Вжные моменты:
1) Текстуры могут быть как TGA, так и IMF
2) Текстуры грузятся из текущей директории
3) Если при загрузке путь содержит "\3do\plane\", то при загрузке эта директория сканируется и собирается список всех доступных для модели скинов (которые лежат в директориях summer, winter и т.д.). Можно создавать свои директории с любым именем и кидать туда свои скины. Главное, чтобы они были:
a) TGA/IMF
b) содержали три версии для лодов (skin1o, skin1p, skin1q)
Если кроме этого для нулевого лода в директории есть и tgb, то для него будет использован он. Скины можно переключать. Также можно переключать различные уровни повреждения (ели оно доступно для модели).
Немного о текстурировании. Оно всё ещё не полное. Во-первых, не устанавливаю для материала его хар-ки (отражающую способность, яркость и т.д.). Во-вторых, не использую мультитекстурирование, соответственно декали (эмблемы, места под знаки и номера дефолтные, обычно чёрные фрагменты текстур). Третий момент - из-за того, что помимо описания в him правила сборки ещё задаются и в классе модели, иногда при отображении возникают некоторые артефакты. Например, щиток не выдвинут, но модель отрисовывается как будто с выдвинутым щитком, но без него.

С этим ничего не сделать, придётся терпеть так, автоматически разбирать классы и строить полную модель я не буду, иначе придётся писать всю игру. Ну, почти всю.
Ещё один момент, который является следствием того, что все правила сборки сразу недоступны, это z-fighting (дрожание текстур с некоторых частях модели). Кратко, что это такое и почему возникает:
Предствте, что у вас есть два полигона, которые находятся на одинаковом расстоянии от вас. Пусть один красный, а другой - синий. Какой мы увидим? Если они перпендикулярны оси взгляда, то тот, который нарисовали последним. Но если мы начнём их поворачивать, то из-за конечной глубины z-буффера и конечной точности вычислений на определённых углах у нас одна текстура будет пробиваться через другую. Это очень на пальцах, чтоб не заграмождать.
Из-за того, что в моделях встречаются фрагменты находящиеся на одинаковых позициях, но с разными текстурами и мы не знаем, какой их них должен быть чейчас показан этот эффект присутствует при отображении. С этим тож, без разбора класса, ничего особенно не сделать. Может позже сделаю возможность отключать отображение отдельных мешей. Но пока так.
Ну и при отображении возможны некоторые артефакты связанные с блендингом. Во-первых - при отрисовке я не сортирую полигоны, а во-вторых - мне непонятен физ. смысл одного параметра в материале (tfBlendAdd). Во общем, где-то что-то может просвечивать когда не надо, или на оборот, не просвечивать.
Ещё добавил пару опций. Во-первых, отрисовку нормалей. А во-вторых - возможность закраски полигонов цветными треугольниками. Это, как раз, для выявления в модели мест, где возможно возникнавение z-fighting'а и нахождения кривоватых мешей. Такие действительно есть, например, дублирующиеся полигоны, когда они в абсолютно одинаковой позиции. Если оключить текстурирование, включить цветные полигоны и отображение только каркаса, то при вращении модели хорошо видно мерцающие рёбра там, гду высока вероятность возникнавения z-fighting'а.
Ещё сделал сохранение положения и размера окра, а также опцый отображения.
По записи. Запись сразу всей модели в текстовые меши и в obj (каждый меш пишется в отдельный файл). В obj пока только в раздельные файлы (также, каждому obj свой mtl). Запись всей модели в один файл сделаю познее, сейчас, как уже говорил, свободного времени практически нет. Текстуры и mat-ы не пишу, может потом и сделаю, но там надо копировать игровую структуру директорий, а это чревато перезаписыванием того, что не надо. Пока так, там посмотрим.
Ещё включил анизатропную фильтрацию текстур и сглаживание (если карта расширение поддерживает).
Вроде всё, но может чего забыл.

Проверяйте и раппортуйте здесь битьём в бубен.