KranX / Vangers

The video game that combines elements of the racing and role-playing genres.
https://store.steampowered.com/app/264080/Vangers/
GNU General Public License v3.0
669 stars 89 forks source link

Поддержка 3D моделей #533

Open lpenguin opened 2 years ago

lpenguin commented 2 years ago

Нужно добавить поддержку отображения 3D моделей через AbstractVisualBackend.

См. параллельный PR https://github.com/kvark/vange-rs/pull/191

Основная концепция - сначала загружаем все меши моделей в видео-память (create_model), потом создаем инстансы этих мешей (model_instance_create) и каждый кадр меняем их трансформацию (model_instance_set_transform). Обновление трансформации происходит в функции отрисовки 3D объекта, и, если объект это мехос - то еще дополнительно обновляем трансформацию моделей колес и оружия.

Проблемы, которые надо решить:

  1. Формат модели определен в самих вангерах, а библиотека renderer сделана максимально отдельно от основного кода вангеров.
  2. Код софтверной отрисовки 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);