Таким образом, вывод SubSector'a состоит в выводе всех ограничивающих его лицевых сегментов и, при необходимости, фрагментов пола и потолка.

void drawSubSector (int s ) {
int firstSeg = subSectors [s].firstSeg;
int numSegs = subSectors [s].numSegs;
Segment * seg = &Segs [firstSeg];
if ( curSector == NULL )// 1st ssector contains viewer {
SideDef * side = &sides[lines[seg->lineDef].sideDefs[seg->lineSide]];
// find sector with viewer curSector = &subSectors [s]; locZ = 40 + sectors [side -> sector].floorHeight;
}
for (int i = 0; i < numSegs; i++, seg++ ) if (frontFacing ( seg -> from, seg -> to )) drawSeg (seg );
}

При выводе SubSector (сегментов) в порядке удаления от наблюдателя необходим механизм для отслеживания тех частей экрана, которые уже были заполнены. В силу структуры сцены наиболее подходящим для этой цели является метод плавающего горизонта. Линии горизонта (два массива размером в ширину экрана) topLine и bottomLine вводятся так, чтобы была незаполненной только область между этими линиями. При выводе стены (пола, потолка) выводится только та часть, которая находится между линиями горизонта, а сами эти линии соответствующим образом корректируются.

Если для какого-либо столбца с имеет место неравенство

topLine [с] > bottomLine [с], то это означает, что данный столбец уже полностью заполнен и его можно пропустить.

Наиболее простым является вывод односторонней стены - выводится только та ее часть, которая находится между линиями горизонта. Так как эта стена проходит от пола до потолка без всяких отверстий, то она полностью закрывает собой все, что расположено за ней. Таким образом, для всех столбцов с, в которые она попадает, после ее вывода можно установить

topLine [с] > bottomLine [с]

Стена рисуется по столбцам; для облегчения вычислений используется тот факт, что высоты столбцов каждой стены изменяются линейно. Сначала производится вычисление размеров очередного столбца [top,bottom], затем этот столбец отсекается по линиям горизонта, т. е. по отрезку [topLine[col], bottomLine[cöl]].


⇐ Предыдущая| |Следующая ⇒