Хранение вершин, нормалей, полигонов 3D модели
Буду не всё разжёвывать, так как времени немного.
Работать мы будем с файлом VEHICLES.EXP. Находится он в папке SHELL образа игры Vigilante 8. В этом файле хранятся 3D модели и текстуры автомобилей из меню выбора авто.
![post-95-0-25454700-1479818149.png](http://pscd.ru/forum/uploads/monthly_11_2016/post-95-0-25454700-1479818149.png)
Первая модель, это модель автомобиля 67 Rattler. Данные первой модели с $2E по $455E.
Полигоны хранятся с $10E по $D62.
Точки (Вершины, нормали) – с $D62 по $11EA
Того получается
Полигонов: 145 (примерно)
Точек: 145
![post-95-0-69731900-1479818139.png](http://pscd.ru/forum/uploads/monthly_11_2016/post-95-0-69731900-1479818139.png)
Точка занимает 8 байт.
![post-95-0-90275400-1479818139.png](http://pscd.ru/forum/uploads/monthly_11_2016/post-95-0-90275400-1479818139.png)
Устройство примерно следующие. Сначала идут координаты X, Y, Z затем стопбайт (хотя он не используется - визуальный). Каждая из координат занимает 2 байта.
Устройство точек точно такое же, как и в моделям TMD.
Скорее всего сначала идёт блок вершин, а потом блок нормалей.
С полигонами всё намного сложнее. Придётся рассмотреть много вариантов.
Полигоны записаны в «блоке». То есть там есть информация как о полигонах, так видимо и о текстурах.
![post-95-0-10265800-1479818140.png](http://pscd.ru/forum/uploads/monthly_11_2016/post-95-0-10265800-1479818140.png)
Первый, так называемый, «блок» занимает 24 байта.
![post-95-0-30474700-1479818140.png](http://pscd.ru/forum/uploads/monthly_11_2016/post-95-0-30474700-1479818140.png)
Информация о полигоне идёт через 4 байта с начала блока и занимает 6 байт.
![post-95-0-94341800-1479818148.png](http://pscd.ru/forum/uploads/monthly_11_2016/post-95-0-94341800-1479818148.png)
Полигон представляет собой треугольник.
Теперь немного о самих блоках.
Первые 4 байта информация которая поможет нам понять, как будет устроен блок. Следующие 6 байт - это полигон. Все остальные байты, судя по всему информация о текстурах.
Рассмотрим варианты.
![post-95-0-52812100-1479818140.png](http://pscd.ru/forum/uploads/monthly_11_2016/post-95-0-52812100-1479818140.png)
XX XX XX 09 - Данная структура говорит нам о том, что следующий блок будет через 20 байт.
Красной полосой обозначены 20 байт, зелёной – следующий информационный блок.
![post-95-0-69057800-1479818140.png](http://pscd.ru/forum/uploads/monthly_11_2016/post-95-0-69057800-1479818140.png)
XX XX XX 05 - Данная структура говорит нам о том, что следующий блок будет через 16 байт.
Цвета и полоски на картинки не несут смысловой нагрузки.
![post-95-0-87372900-1479818140.png](http://pscd.ru/forum/uploads/monthly_11_2016/post-95-0-87372900-1479818140.png)
XX XX XX 08 – Данная структура говорит нам о том, что следующий блок будет через 12 байт.
Красной полосой обозначены 12 байт, зелёной – следующий информационный блок.
![post-95-0-12054400-1479818141.png](http://pscd.ru/forum/uploads/monthly_11_2016/post-95-0-12054400-1479818141.png)
XX XX XX 04 – Данная структура говорит нам о том, что следующий блок будет через 8 байт.
Цвета и полоски на картинки не несут смысловой нагрузки.
XX XX XX 0C - Данная структура говорит нам о том, что следующий блок будет через 16 байт.
XX XX XX 2C - Данная структура говорит нам о том, что следующий блок будет через 16 байт.
XX XX XX 00 - Данная структура говорит нам о том, что следующий блок будет через 8 байт.
XX XX XX 1D - Данная структура говорит нам о том, что следующий блок будет через 20 байт.
XX XX XX 1F - Данная структура говорит нам о том, что следующий блок будет через 20 байт.
Мог где-то запутаться, но примерно как-то так.
Прикрепленные изображения