forked from smartblade/BldMystery
-
Notifications
You must be signed in to change notification settings - Fork 0
/
bw_desc_by_sgi1981.txt
349 lines (306 loc) · 14.8 KB
/
bw_desc_by_sgi1981.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
И так.
описание формата "*.BW" выдаю.
Вводные замечания :
I. Формат строки в файле формата "*.BW" :
1. Значение типа Longword - длина строки в символах.
(Каждый символ кодируется одним байтом).
2. Последовательность байтов, количество которых в этой последовательности равно
длине строки в символах.
II. Оси декартовой системы координат карты "*.BW" имеют такое направление :
ось X направлена вправо,
ось Y направлена вниз,
ось Z направлена вперед.
III. Коеффициенты нормального уравнения плоскости :
cos (alpha), cos(beta), cos(gamma), p;
(alpha, beta, gamma - углы между описываемой плоскостью и соответственно
осями X, Y, Z;
p - расстояние от начала системы координат до описываемой плоскости)
где нормальное уравнение плоскости имеет вид
x*cos(alpha)+z*cos(beta)+y*cos(gamma)-p=0.
(x, y, z - координаты точек пренадлежащих описываемой плоскости).
IV. В файле содержатся значения переменных таких типов :
1. Тип BYTE - число размером в 1 байт целое без знака.
2. Тип LONGWORD - число размером в 4 байта целое без знака.
3. Тип SINGLE - число размером в 4 байта дробное со знаком.
4. Тип DOUBLE - число размером в 8 байтов дробное со знаком.
V. Цвет в файле "*.BW" описывается тремя байтами :
первый байт - интенсивность красной составляющей,
второй байт - интенсивность зеленой составляющей,
первый байт - интенсивность синей составляющей.
(***********************************************)
Расшифровка файла "*.BW" .
Значение типа Longint - общее количество атмосфер карты.
Далее идут последовательно структуры (одна или несколько),
каждая из которых содержит описание собственной атмосферы.
Формат структуры :
{Начало описания атмосферы}
1. Строка с именем атмосферы.
2. Последовательность из трёх байтов
(первый - интенсивность красного цвета атмосферы 0...255,
второй - интенсивность зелёного цвета атмосферы 0...255,
третий - интенсивность синего цвета атмосферы 0...255).
3. Значение типа Single (вещественное 4 байта) - интенсивность атмосферы.
Конец структуры описания атмосферы.
{Конец описания атмосферы}
(-----------------------------------------------)
Значение типа Longword - общее количество вершин всех секторов.
Далее - записи, каждая из которых хранит 3 числа типа Double -
координаты вершины в Декартовой системе координат.
(-----------------------------------------------)
После описания координат всех вершин идет значиение типа Longword -
количество секторов.
Затем описание каждого сектора.
{НАЧАЛО СТРУКТУРЫ ОПИСАНИЯ СЕКТОРА}
Строка с наименованием атмосферы сектора.
Параметры освещения ambient :
Три последовательных числа типа BYTE - начальный цвет градиента ambient,
Значение типа Single (Зависит от первых трех байтов цвета).
Число типа Single в машинном представлении равно $3C800000.
Шесть чисел типа Single. (Равны 0).
Восемь байтов $CD.
Значение типа Longword = 0.
Параметры освещения flat :
Три последовательных числа типа BYTE - начальный цвет градиента flat.
Значение типа Single (Зависит от первых трех байтов цвета).
Число типа Single в машинном представлении равно $3C800000.
Шесть чисел типа Single. (Равны 0).
Восемь байтов $CD.
Значение типа Longword = 0.
Значение типа Double (8 байтов) - X-координата Lights/flat.
Значение типа Double (8 байтов) - Y-координата Lights/flat.
Значение типа Double (8 байтов) - Z-координата Lights/flat.
Значение типа Longword - количество полигонов.
Далее описание каждого полигона.
{Начало описания полигона}
Значение типа Longword - Числовой идентификатор вида формата полигона - может
принимать значения : 7001, 7002, 7003, 7004, 7005.
Если значение числового идентификатора вида формата
полигона равно 7001 - полигон не имеет порталов.
Формат описания этого полигона таков :
{
Четыре значения типа DOUBLE - коэффициенты нормального
уравнения плоскости описываемой поверхности :
x*cos(alpha)+z*cos(beta)+y*cos(gamma)-p=0.
Значение типа Longword = 3.
Значение типа Longword = 0.
Строка с именем текстуры поверхности.
Матрица перехода от системы координат карты к локальной системе координат
текстуры поверхности.(6 чисел типа Double).
Значение типа SINGLE - смещение по X текстуры.
Значение типа SINGLE - смещение по Y текстуры.
Значение типа Double (8 байтов) - равно 0.
Значение типа Longword - количество вершин полигона.
Далее последовательно значения типа Longword - все индексы вершин полигона.
(Индекс - номер вершины в порядке её описания в файле "*.BW".
}
Если значение числового идентификатора вида формата
полигона равно 7002 - полигон полностью является порталом
(ни один пиксел собственной текстуры не виден).
Формат описания этого полигона таков :
{
Четыре значения типа DOUBLE - коэффициенты нормального
уравнения плоскости описываемой поверхности :
x*cos(alpha)+z*cos(beta)+y*cos(gamma)-p=0.
Значение типа Longword - количество вершин полигона-портала.
Далее последовательно значения типа Longword - все индексы вершин полигона-портала.
(Индекс - номер вершины в порядке её описания в файле "*.BW"
Значение типа Longword - Индекс сектора, с которым соединяет данный портал.
(Индекс сектора - номер сектора в порядке его описания в файле "*.BW".
Значение типа Longword = 3.
Значение типа Longword = 0.
Строка с именем текстуры полигона.
Матрица перехода от системы координат карты к локальной системе координат
текстуры поверхности.(6 чисел типа Double).
Значение типа SINGLE - смещение по X текстуры.
Значение типа SINGLE - смещение по Y текстуры.
Значение типа Double (8 байтов) - равно 0.
}
Если значение числового идентификатора вида формата
полигона равно 7003 - полигон имеет один портал
(видна часть пикселов собственной текстуры полигона).
Формат описания этого полигона таков :
{
Четыре значения типа DOUBLE - коэффициенты нормального
уравнения плоскости описываемой поверхности :
x*cos(alpha)+z*cos(beta)+y*cos(gamma)-p=0.
Значение типа Longword = 3.
Значение типа Longword = 0.
Строка с именем текстуры поверхности.
Матрица перехода от системы координат карты к локальной системе координат
текстуры поверхности.(6 чисел типа Double).
Значение типа SINGLE - смещение по X текстуры.
Значение типа SINGLE - смещение по Y текстуры.
Значение типа Double (8 байтов) - равно 0.
Значение типа Longword - количество вершин полигона.
Далее последовательно значения типа Longword - все индексы вершин полигона.
(Индекс - номер вершины в порядке её описания в файле "*.BW".
Нумерация начинается от нуля).
Значение типа Longword - количество вершин портала.
Далее последовательно значения типа Longword - все индексы вершин портала.
(Индекс - номер вершины в порядке её описания в файле "*.BW".
Нумерация начинается от нуля).
Индекс сектора, с которым соединяет данный портал.
(Индекс сектора - номер сектора в порядке его описания в файле "*.BW".
Нумерация начинается от нуля).
Количество ограничивающих плоскостей.
(Ограничивающая плоскость - это плоскость перпендикулярная полигону, отделяющая
множество точек портала от точек не пренадлежащих порталу и пренадлежащих полигону.
Эта плоскость проходит через отрезок, который является стороной портала.
Если этот отрезок содержится в отрезке, который является стороной полигона, то в
таком случае плоскость не задается.)
Далее последовательно записаны коеффициенты нормального уравнения каждой из этих плоскостей :
x*cos(alpha)+z*cos(beta)+y*cos(gamma)-p=0.
}
Если значение числового идентификатора вида формата
полигона равно 7004 - полигон имеет несколько порталов.
Формат описания этого полигона таков :
{
Четыре значения типа DOUBLE - коэффициенты нормального
уравнения плоскости описываемой поверхности :
x*cos(alpha)+z*cos(beta)+y*cos(gamma)-p=0.
Значение типа Longword = 3.
Значение типа Longword = 0.
Строка с именем текстуры поверхности.
Матрица перехода от системы координат карты к локальной системе координат
текстуры поверхности.(6 чисел типа Double).
Значение типа SINGLE - смещение по X текстуры.
Значение типа SINGLE - смещение по Y текстуры.
Значение типа Double (8 байтов) - равно 0.
Значение типа Longword - количество вершин полигона.
Далее последовательно значения типа Longword - все индексы вершин полигона.
(Индекс - номер вершины в порядке её описания в файле "*.BW".
******Далее идет описание порталов.*******
Количество порталов этого полигона.
******Далее идет описание каждого портала.*******
Значение типа Longword - количество вершин портала.
Далее последовательно значения типа Longword - все индексы вершин портала.
(Индекс - номер вершины в порядке её описания в файле "*.BW".
Индекс сектора, с которым соединяет данный портал.
(Индекс сектора - номер сектора в порядке его описания в файле "*.BW"
Количество ограничивающих плоскостей.
(Ограничивающая плоскость - это плоскость перпендикулярная полигону, отделяющая
множество точек портала от точек не пренадлежащих порталу и пренадлежащих полигону.
Эта плоскость проходит через отрезок, который является стороной портала.
Если этот отрезок содержится в отрезке, который является стороной полигона, то в
таком случае ограничивающая плоскость не задается.)
Далее последовательно записаны коеффициенты нормального уравнения каждой из
ограничивающих плоскостей :
x*cos(alpha)+z*cos(beta)+y*cos(gamma)-p=0.
******Далее идет описание участков полигона.*******
(Участок может быть простым или составным.
Простой участок полигона - это часть полигона, которая почти всегда имеет не более одного портала.
Составной участок полигона - это часть полигона, которая состоит из двух участков полигона. Каждый из этих двух участков может быть либо простым,
либо составным. Таким образом, разбиение полигона на участки есть рекурсивное.)
******Описание участка полигона.*******
Значение типа Longword - Числовой идентификатор
вида формата участка полигона - может
принимать значения : 8001, 8002, 8003.
Если значение числового идентификатора вида формата участка полигона равно
8001 или 8002 - это составной участок.
В часности : если это значение равно 8002 - это составной участок с
дополнительной текстурой.
Формат описания составного участка таков :
{Описание двух участков полигона, каждый из которых входит в состав
этого составного участка.
Потом следуют коеффициенты нормального уравнения плоскости, разделяющей два составляющих участка :
x*cos(alpha)+z*cos(beta)+y*cos(gamma)-p=0.
(Разделяющая плоскость - это плоскость перпендикулярная полигону, отделяющая
множество точек первого участка от множества точек второго участка.).
Если значение было равно 8002 - то дополнительно присутствуют следующие данные :
Значение типа Longword = 3.
Значение типа Longword = 0.
Строка с именем дополнительной текстуры.
Матрица перехода от системы координат карты к локальной системе координат
дополнительной текстуры.(6 чисел типа Double).
Значение типа SINGLE - смещение по X дополнительной текстуры.
Значение типа SINGLE - смещение по Y дополнительной текстуры.
Значение типа Double (8 байтов) - равно 0.
}
Если значение числового идентификатора вида формата участка полигона равно
8003 - это простой участок.
Формат описания этого участка таков :
{Вначале записано значение типа Longword - количество порталов, которые содержатся
в этой простой части.
Потом записана роль каждого из этих порталов.
Формат описания роли каждого из этих порталов таков:
{Значение типа Longword - номер портала.
(Номер портала - номер в порядке
описания портала в описании полигона. Нумерация начинается от нуля.)
Значение типа Longword - количество ограничивающих плоскостей, которые были описаны
в описании этого портала и используются в описании роли портала.
(В данном случае :
Ограничивающая плоскость - это плоскость перпендикулярная описываемому простому участку полигона, отделяющая
множество точек портала от точек не пренадлежащих порталу и пренадлежащих простому участку. Эта плоскость проходит через отрезок, который является стороной портала.
Если этот отрезок содержится в отрезке, который отделяет данный простой участок полигона от другого участка полигона, то в таком случае ограничивающая плоскость не задается.)
Потом записан индекс ограничивающей плоскости.
(Индекс в данном случае - это номер ограничивающей плоскости в описании
данного портала. Нумерация начинается от нуля).
}
}
Если значение числового идентификатора вида формата
полигона равно 7005 - полигон имеет нулевую текстуру
NULL.
(В данном случае полигон есть часть границы карты.
При отображении этого полигона видна текстура NULL).
Формат описания этого полигона таков :
{Четыре значения типа DOUBLE - коэффициенты нормального
уравнения плоскости описываемой поверхности :
x*cos(alpha)+z*cos(beta)+y*cos(gamma)-p=0.
Значение типа Longword - количество вершин полигона.
Далее последовательно значения типа Longword - все индексы вершин полигона.
(Индекс - номер вершины в порядке её описания в файле "*.BW".
}
{Конец описания полигона}
{КОНЕЦ СТРУКТУРЫ ОПИСАНИЯ СЕКТОРА}
(-----------------------------------------------)
{Описание источников света для каждого сектора}
Значение типа Longword - количество источников света.
(Включая Солнце - Для каждого сектора существует дополнительно внешний источник света - Солнце).
Значение типа LONGWORD - Числовой идентификатор источника света.
Если значение числового идентификатора источника света равно 15002,
то этот источник есть EXTERIOR (Солнце).
В этом случае формат описания источника света иммет такой вид
{
Три последовательных числа типа BYTE - цвет Exterior (внешнего освещения).
Значение типа Single (Зависит от первых трех байтов цвета).
Значение типа Single = 0,03125.
Шесть чисел типа Single.(Равны 0).
Восемь байтов $CD.
Значение типа Longword = 0.
Значение типа Double (8 байтов) - направляющий косинус X-координаты Lights/flat.
Значение типа Double (8 байтов) - направляющий косинус Y-координаты Lights/flat.
Значение типа Double (8 байтов) - направляющий косинус Z-координаты Lights/flat.
Значение типа Longword = количество секторов, где находится этот источник света.
Далее последовательно значения типа Longword - номера секторов, которые имеют этот источник света.
}
Если значение числового идентификатора источника света равно 15001,
то этот источник есть исскуственный.
В этом случае формат описания источника света иммет такой вид
{
Три байта цвета источника.
Значение типа Single - интенсивность источника.
Значение типа Single - Precision (Точность).
Значение типа Double (8 байтов) - X координата источника.
Значение типа Double (8 байтов) - Z координата источника.
Значение типа Double (8 байтов) - Y координата источника.
Значение типа Longword - индекс сектора, где находится источник света.
}
{Конец описания источников света для каждого сектора}
(-----------------------------------------------)
{Описание Initial Point}
Position:
Значение типа Double (8 байтов) = X.
Значение типа Double (8 байтов) = Y.
Значение типа Double (8 байтов) = Z.
Orientation:
Значение типа Double (8 байтов) = X.
Значение типа Double (8 байтов) = Y.
Значение типа Double (8 байтов) = Z.
{Конец описаниЯ Initial Point}
(-----------------------------------------------)
{Описание группы каждого сектора}
Значение типа Longword - группа сектора.
{Конец описание группы каждого сектора}
(-----------------------------------------------)
Значение типа Longword - количество секторов.
Последовательно друг за другом - Строки с наименованиями всех секторов.