Сповіщення
Очистити все

Level.geom


Ранг:
Майстер
Роль:
Гість
Записи:
752
Приєднався:
2 роки тому
 

Опис файлу

Містить всю видиму геометрію карти. Тут вказані всі вершини з нормалями та координатами для текстур та індекси для побудови геометрії, а також синхронізація.

Файл складається з таких блоків:

 
Код блоку
Версія компілятора картки
1
Опис вершин
9
Опис індексів
10
Опис синхронізації
11

 

 

Версія компілятора картки (блок для всіх карток однаковий)

 
Значення
Розмір
Код блоку
1
Word(2)
Стиснення даних (0 - ні, 32768 - так)
0
Word(2)
Розмір блоку (у байтах)
4
DWord(4)
Номер версії (для всіх однаковий)
13
DWord(4)

 

 

Опис вершин

 
Значення
Розмір
Код блоку
9
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)
Вершини
-
-

Формат вершин

Декілька слів про формат вершин. Як відомо, у файлі кілька блоків опису вершин. У грі не всі об'єкти однакові: для брашів потрібно вказувати координати лайтмапів, а координати текстур для дерев можна спростити. Тому вершини, задані в різних блоках, можу відрізнятися. Формат вершини задається за допомогою кількох структур – це стандартний формат вертекс-буфера D3D. Тобто. у файлі зберігаються готові скомпоновані вертекс-буфери для D3D:

 
Значення
Розмір
??? (Завжди нуль)
0
Word(2)
Зміщення
-
Word(2)
Тип змінних
-
Word(2)
Що описують змінні
-
Word(2)

На початку будь-якої вершини знаходяться координати її розміщення, тому, у форматі вершин опис координат не вказується. У картах версії 2215 зустрічаються лише три формати вершин:

Рослинність
 
Значення
Розмір
Нуль
0
Word(2)
Зміщення
12
Word(2)
Тип змінних
4
Word(2)
Нормалі
3
Word(2)
Чинник освітленості(?)
?
Word(2)
Зміщення
16
Word(2)
Тип змінних
4
Word(2)
Тангенти
6
Word(2)
Коректор текс.коорд.Х
0/1
Word(2)
Зміщення
20
Word(2)
Тип змінних
4
Word(2)
Бі-тангенти
7
Word(2)
Коректор текс.коорд.Y
0/1
Word(2)
Зміщення
24
Word(2)
Тип змінних
7
Word(2)
Координати текстури
5
Word(2)

Таким чином, сумарна довжина однієї вершини рослинності дорівнює 32 байтам.

 

Браш
 
Значення
Розмір
Нуль
0
Word(2)
Зміщення
12
Word(2)
Тип змінних
4
Word(2)
Нормалі
3
Word(2)
Чинник освітленості(?)
?
Word(2)
Зміщення
16
Word(2)
Тип змінних
4
Word(2)
Тангенти
6
Word(2)
Коректор текс.коорд.X
0/1
Word(2)
Зміщення
20
Word(2)
Тип змінних
4
Word(2)
Бі-тангенти
7
Word(2)
Коректор текс.коорд.Y
0/1
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)
Чинник освітленості(?)
?
Word(2)
Зміщення
16
Word(2)
Тип змінних
4
Word(2)
Тангенти
6
Word(2)
Коректор текс.коорд.X
0/1
Word(2)
Зміщення
20
Word(2)
Тип змінних
4
Word(2)
Бі-тангенти
7
Word(2)
Коректор текс.коорд.Y
0/1
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)
Коректор текс.коорд.Y
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)

   
Цитата