Level.geom — различия между версиями
Материал из S.T.A.L.K.E.R. Inside Wiki
(→Типы переменных) |
Neo (обсуждение | вклад) |
||
| Строка 798: | Строка 798: | ||
</tr> | </tr> | ||
</table> | </table> | ||
| + | [[Категория:Форматы файлов]] | ||
Версия 04:56, 15 апреля 2007
Формат разобрал Haper
Содержание
Описание файла
Cодержит всю видимую геометрию карты. Тут указаны все вершины с нормалями и координатами для текстур и индексы для построения геометрии, а так же синхронизация.
Файл состоит из таких блоков:
Код блока |
|
| Версия компилятора карты | 1 |
| Описание вершин | 9 |
| Описание индексов | 10 |
| Описание синхронизации | 11 |
Версия компилятора карты (блок для всех карт одинаковый)
Значение |
Размер |
|
| Код блока | 1 |
Word(2) |
| Сжатие данных (0 - нет, 32768 - да) | 0 |
Word(2) |
| Размер блока (в байтах) | 4 |
DWord(4) |
| Номер версии (для всех одинаковый) | 13 |
DWord(4) |
Описание вершин
Значение |
Размер |
|
| Код блока | 1 |
Word(2) |
| Сжатие данных (0 - нет, 32768 - да) | 0 |
Word(2) |
| Размер блока (в байтах) | 4 |
DWord(4) |
| Количество блоков описания вершин | - |
DWord(4) |
| Блок описания вершин | - |
- |
Блок описания вершин
Значение |
Размер |
|
| Начало нового блока | 0 |
DWord(4) |
| Начало описания формата вершины | 2 |
DWord(4) |
| Формат вершины | - |
- |
| Конец описания формата вершины | 255 |
DWord(4) |
| Начало описания вершин | 17 |
DWord(4) |
| Количество вершин | - |
DWord(4) |
| Вершины | - |
- |
Формат вершин
Несколько слов о формате вершин. Как уже известно, в файле несколько блоков описания вершин. В игре не все объекты одинаковы: для брашей нужно указывать координаты лайтмапов, а координаты текстур для деревьев можно упростить. Поэтому, вершины, заданные в разных блоках, могу отличаться. Формат вершины задаётся при помощи нескольких структурок:
Значение |
Размер |
|
| ???(всегда ноль) | 0 |
Word(2) |
| Смещение | - |
Word(2) |
| Тип переменных | - |
Word(2) |
| Что описывают переменные | - |
Word(2) |
В самом начале любой вершины находятся координаты её размещения, поэтому, в формате вершин описание координат не указывается. В картах версии 2215 встречаются только три формата вершин:
Растительность |
||
Значение |
Размер |
|
| Ноль | 0 |
Word(2) |
| Смещение | 12 |
Word(2) |
| Тип переменных | 4 |
Word(2) |
| Нормали | 3 |
Word(2) |
| Ноль | 0 |
Word(2) |
| Смещение | 16 |
Word(2) |
| Тип переменных | 4 |
Word(2) |
| Би-нормали | 6 |
Word(2) |
| Ноль | 0 |
Word(2) |
| Смещение | 20 |
Word(2) |
| Тип переменных | 4 |
Word(2) |
| Тангент-нормали | 7 |
Word(2) |
| Ноль | 0 |
Word(2) |
| Смещение | 24 |
Word(2) |
| Тип переменных | 7 |
Word(2) |
| Координаты текстуры | 5 |
Word(2) |
Таким образом, суммарная длина одной вершины растительности равна 32 байтам.
Браш |
||
Значение |
Размер |
|
| Ноль | 0 |
Word(2) |
| Смещение | 12 |
Word(2) |
| Тип переменных | 4 |
Word(2) |
| Нормали | 3 |
Word(2) |
| Ноль | 0 |
Word(2) |
| Смещение | 16 |
Word(2) |
| Тип переменных | 4 |
Word(2) |
| Би-нормали | 6 |
Word(2) |
| Ноль | 0 |
Word(2) |
| Смещение | 20 |
Word(2) |
| Тип переменных | 4 |
Word(2) |
| Тангент-нормали | 7 |
Word(2) |
| Ноль | 0 |
Word(2) |
| Смещение | 24 |
Word(2) |
| Тип переменных | 1 |
Word(2) |
| Координаты текстуры | 5 |
Word(2) |
| Ноль | 0 |
Word(2) |
| Смещение | 32 |
Word(2) |
| Тип переменных | 6 |
Word(2) |
| Координаты лайтмапа | 261 |
Word(2) |
Суммарная длина одной вершины браша составляет 36 байт.
Энтитя |
||
Значение |
Размер |
|
| Ноль | 0 |
Word(2) |
| Смещение | 12 |
Word(2) |
| Тип переменных | 4 |
Word(2) |
| Нормали | 3 |
Word(2) |
| Ноль | 0 |
Word(2) |
| Смещение | 16 |
Word(2) |
| Тип переменных | 4 |
Word(2) |
| Би-нормали | 6 |
Word(2) |
| Ноль | 0 |
Word(2) |
| Смещение | 20 |
Word(2) |
| Тип переменных | 4 |
Word(2) |
| Тангент-нормали | 7 |
Word(2) |
| Ноль | 0 |
Word(2) |
| Смещение | 24 |
Word(2) |
| Тип переменных | 4 |
Word(2) |
| ??? | 10 |
Word(2) |
| Ноль | 0 |
Word(2) |
| Смещение | 28 |
Word(2) |
| Тип переменных | 1 |
Word(2) |
| Координаты текстуры | 5 |
Word(2) |
Суммарная длина одной вершины энтити составляет 36 байт.
Исходя из этого, получаем, например, такой вид вершины:
Браш |
|||
Значение |
Смещение |
Размер |
|
| Координата X | 30.76 |
0 |
DWord(4) |
| Координата Z | 0.2 |
4 |
DWord(4) |
| Координата Y | 51.4 |
8 |
DWord(4) |
| Нормаль по X | 127 |
12 |
Byte(1) |
| Нормаль по Z | 255 |
13 |
Byte(1) |
| Нормаль по Y | 127 |
14 |
Byte(1) |
| ??? | 1 |
15 |
Byte(1) |
| Би-нормаль по Х | 127 |
16 |
Byte(1) |
| Би-нормаль по Z | 255 |
17 |
Byte(1) |
| Би-нормаль по Y | 255 |
18 |
Byte(1) |
| ??? | 0 |
19 |
Byte(1) |
| Тангент-нормаль по X | 0 |
20 |
Byte(1) |
| Тангент-нормаль по Z | 127 |
21 |
Byte(1) |
| Тангент-нормаль по Y | 127 |
22 |
Byte(1) |
| ??? | 0 |
23 |
Byte(1) |
| Координата текстуры X | 3.1802 |
24 |
Single(4) |
| Координата текстуры Y | 2.2143 |
28 |
Single(4) |
| Координата лайтмапа X | 0.4023 |
32 |
ShortSingle(2) |
| Координата лайтмапа Y | 0.000097 |
34 |
ShortSingle(2) |
Типы переменных
Код типа |
Значение |
1 |
DWord(4) + DWord(4) |
4 |
Byte(1) + Byte(1) + Byte(1) + Byte(1) |
6 |
Word(2)/32768 + Word(2)/32768 |
7 |
(Byte(1)-128)/128 + (Byte(1)-128)/128 + (Byte(1)-128)/128 + (Byte(1)-128)/128 |
С ходу, возможно, трудно въехать в структуру данных, но когда начнёте ковырять файл, сразу всё поймёте - ничего сложного нет.
Описание индексов
Значение |
Размер |
|
| Код блока | 10 |
Word(2) |
| Сжатие данных (0 - нет, 32768 - да) | 0 |
Word(2) |
| Размер блока (в байтах) | - |
DWord(4) |
| Количество блоков описания индексов | - |
DWord(4) |
| Блок описания индексов | - |
- |
Блок описания индексов
Значение |
Размер |
|
| Количество индексов в блоке | - |
DWord(4) |
| Индексы | - |
DWord(4) |
Индекс: Word(2) .
Количество индексов должно быть всегда кратно трём, потому что по индексам строятся треугольники.
Описание синхронизации
(что они синхронизируют, для учёных до сих пор остаётся загадкой):
Значение |
Размер |
|
| Код блока | 11 |
Word(2) |
| Сжатие данных (0 - нет, 32768 - да) | 0 |
Word(2) |
| Размер блока (в байтах) | - |
DWord(4) |
| Количество блоков синхронизации | - |
DWord(4) |
| Блоки синхронизации | - |
- |
Блок синхронизации
Значение |
Размер |
|
| ??? | 0 |
DWord(4) |
| ??? | 0 |
DWord(4) |
| ??? | 0 |
DWord(4) |
| ??? | 0 |
DWord(4) |
| Количество единиц синхронизации | - |
DWord(4) |
| Единицы синхронизации | - |
- |
Единица синхронизации
Значение |
Размер |
|
| ??? | - |
DWord(4) |
| ??? | - |
Word(2) |
| ??? | - |
Word(2) |