dTexY = int2Fixed (bottomHeight - topHeight + 1) / (bottom - top + 1); texY ' = int2Fixed ( side -> yOffset) - (bottom - top + 1) * dTexY; tOffset = tlnvV / invV; t1 += dt;
b1 += db;
invV += dlnvV; tlnvV += dtlnvV;
if (tex != NULL )
tOffset &= tex -> width -1;
if (topLine [col] > bottomLine [col]) continue;
if (top > bottomLine [col]) top = bottomLine [col];
if (top >= topLine [col]) // draw ceiling
drawVertLine (col.topLine [col]++,top,CEILING_COLOR);
else // otherwise correct to
top = topLine [col]; // draw only visible part
if ( bottom > bottomLine [col]) bottom = bottomLine [col];
if (top < bottom ) // now draw visible
{ // part of wall
texY -= (newTop-top)*dTexY; if (tex != NULL )
drawTexturedLine ( col, top, bottom, tex, tOffset, texY, dTexY);
else
drawVertLine ( col, top, bottom,
UPPER_WALL_COLOR); if ( bottom > topLine [col]) topLine [col] = bottom + 1;
}
else
if (top > topLine [col])
topLine [col] = top + 1; if (topLine [col] > bottomLine [col])
Компьютерная графика. Полигональные модели
{
colsLeft-;
colFilled [col] = OxFF;
}
}
}
Формат WAD-файла можно найти по адресу: www.gamers.org/dEngine/doom/spec/uds.666.txt
13.4. Descent
Игра Descent, появившаяся спустя год после выхода игры DOOM, является полностью трехмерной - действие происходит в трехмерном лабиринте, причем коридоры этого лабиринта находятся под всевозможными углами друг к другу и не лежат в одной плоскости. Фактически в ходе игры понятия пола и потолка (а также правая и левая стена) постоянно меняются местами.
Лабиринт в этой игре представлен в виде набора полигональных фрагментов. Каждый такой фрагмент является либо комнатой, либо деформированным кубом. Для удаления невидимых поверхностей используется метод порталов, великолепно работающий в системе длинных коридоров. Все грани текстурируются и применяется достаточно мощная схема освещения. Освещенность непрерывно интерполируется внутри грани. При этом помимо стандартной освещенности ряд объектов (например, ракеты) также выступают в качестве источников света. Для повышения скорости рендеринга достаточно удаленные грани не текстурируются, а закрашиваются постоянным цветом. Основные объекты представлены в виде полигональных моделей и для каждой из них также строится свое BSP-дерево. Достаточно удаленные объекты изображаются спрайтами.