Программирование игр для Windows. Советы профессионала


Реализация отсектеля лучей - часть 2


// для понимания того, как работает процедура

int rcolor;

long xray=0,      // счетчик вертикальных пересечений

yray=0,      // счетчик горизонтальных пересечений

next у cell, // используются для вычисления

next_x cell, // номера следующей ячейки по ходу луча

cell_x,      // координаты текущей ячейки

се11_у,      // луча

x_bound,     // следующие вертикальная

у_bound,     // и горизонтальная точки пересечения

xb_save,     // в этих переменных запоминаются

yb_save,     // координаты точек пересечения

x_delta,     // эти переменные показывают, на сколько

y_delta,     // надо сместиться для перехода к следующей ячейке

ray,         // текущий луч для отсечения

casting=2,   // показывает компоненты Х и Y луча

x_hit_type,  // координаты блока, с которым пересекся луч

y_hit_type,  // используются при отрисовке

top,         // верхняя и нижняя координаты области,

bottom;      // отрисовываемой как стена (с помощью текстуры)


float xi,         // используется для определения х- и у-пересечений

yi,

xi_save,    // используется для сохранения

// точек пересечения Х и У

yi_save,

dist_x,     // расстояние до х- и у-пересечениЙ

dist_у,     //  от точки просмотра scale;    

// масштаб

//СЕКЦИЯ   1 ////////////////////////////////////////

// инициализация

// вычисляет начальный угол от игрока. Поле просмотра 60 градусов.

// Таким образом, рассматриваем только половину - 30 градусов

if ( (view_angle-=ANGLE_360) < 0)

 

// разворачиваем вектор направления взгляда

view_angle=ANGLE_360 + view_angle;

} // конец оператора if

// выбираем цвет для луча

rсо1оr=1 + rand()%14;

 

//СЕКЦИЯ   2 ////////////////////////////////////////   

// цикл для всех 320 лучей

for (ray=0; ray<320; ray++)               

// вычислить первое х-пересечение

if (view_angle >= ANGLE_0 && view_angle < ANGLE_180)

{

// вычислить первую линию, которая пересекается с лучом.

// Примечание: эта линия должна быть выше (впереди

// на игровом поле) игрока.                                 




Начало  Назад  Вперед