Величина firstEdge является индексом первого ребра грани в массиве ребер граней, а величина numEdges содержит число последовательных индексов ребер в блоке ребер граней.
Величина texlnfo является индексом в массив текстурной информации граней.
Величина lightmapStyles хранит битовые флаги различных стилей освещения.
Для каждой грани в блоке карт освещения хранится соответствующая карта освещения, и смещение этой карты находится в поле lightmap Offset.
Блок ребер граней (face edge lump) хранит индексы (в виде 32-битовых целых) ребер для каждой грани. Поскольку одно и то же ребро обычно принадлежит сразу двум граням и имеет для каждой из них протиГпава 11. Пишем рендерер уровней Quake II
воположное направление, то для обозначения того, что ребро должно быть пройдено в обратном направлении, используется отрицательное значение индекса.
Блок плоскостей (plane lump) - это массив из структур, описывающих все разбивающие плоскости в BSP-дереве. Каждая такая плоскость описывается следующей структурой:
struct Quake2BspPlane // Quake 2 planes (stored in
// the planes lump)
{
Vector3D normal; // plane normal (A,B,C)
Float dist; // signed distance along normal
// (D in the plane // equation Ax+By+Cz-D=0) long type; // one of the PLANE_TYPE_*
// constants
};
Уравнение каждой плоскости имеет вид
Ax+By + Cz-D = 0. (11.1)
Блок внутренних узлов (node lump) - это массив структур, служащих для описания внутренних узлов BSP-дерева. При этом нулевому элементу массива соответствует корень дерева. Каждый внутренний узел дерева представлен следующей структурой: о
.л.
struct Quake2BspNode // internal Bsp tree node {
long plane; // index of plane that makes
// this node
long frontChild; // index of front child node long backChild; // index of back child node
short mins [3]; // short-based min value of bbox
short maxs [3]; // short-based max value
// of bbox
unsigned short firstFace; // index of the last face