Vangers
Vangers copied to clipboard
Поддержка 3D моделей
Нужно добавить поддержку отображения 3D моделей через AbstractVisualBackend
.
См. параллельный PR https://github.com/kvark/vange-rs/pull/191
Основная концепция - сначала загружаем все меши моделей в видео-память (create_model
), потом создаем инстансы этих мешей (model_instance_create
) и каждый кадр меняем их трансформацию (model_instance_set_transform
). Обновление трансформации происходит в функции отрисовки 3D объекта, и, если объект это мехос - то еще дополнительно обновляем трансформацию моделей колес и оружия.
Проблемы, которые надо решить:
- Формат модели определен в самих вангерах, а библиотека
renderer
сделана максимально отдельно от основного кода вангеров. - Код софтверной отрисовки 3D моделей, вызывается уже после отрисовки карты и нужно будет передвинуть вызов
VisualBackend::render
Что нужно сделать:
Расширить интерфейс AbstractVisualBackend
следующими функциями:
struct Model; // Описание модели в C3D формате.
/*
Создать скрытый экземпляр модели в видеопамяти.
Используется, как "шаблон" для моделей, которыe нужно отобразить отобразить
*/
uint64_t model_create(Model* model);
void model_destroy(uint64_t model_handle);
/*
Создать экземпляр модели в видеопамяти из шаблона `model_handle`
Уже реальная, отображаемая модель
*/
uint64_t model_instance_create(uint64_t model_handle);
void model_instance_set_transform(uint64_t model_instance_handle, Transform transform);
void model_instance_destroy(uint64_t model_instance_handle);