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


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


casting      =2;   // два луча для одновременного отсечения

хrау = уrау = 0;   // сбросить флаги пересечения

//СЕКЦИЯ   4 ////////////////////////////////////////

while(casting)

{

// продолжить отсечение лучей

if (xray!=INTERSECTION_FOUND)

{

// тест на совпадение луча с асимптотой

if (fabs (y_step[view_angle])==0)

xrау = INTERSECTION_FOUND;

casting--;

dist_x = 1e+8;                                      

} // конец проверки на совпадение с асимптотой

// вычислить текущую позицию карты для проверки

сеll_х

= ( (x_bound+next_x_cell) / CELL_X_SIZE); 

cell_y = (long)(yi / CELL_Y_SIZE) ;

// проверить, есть ли в этом месте блок

if ((x_hit_type = world[(WORLD_ROWS-1) - cell_y][cell_x])!=0)

{

// вычислить

расстояние

dist_x = (yi - y) * inv_sin__table[view angle];

yi_save == yi;

xb_save = x_bound;

// закончить х-отсечение

хrау = INTERSECTION_FOUND;

casting--;

} // конец проверки попадания луча на стену блока

else

{

// вычислить следующее Y-пересечение

yi += y_step[view_angle];

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

} // конец проверки на отсечение по оси Х

//СЕКЦИЯ   5 ////////////////////////////////////////

if (yray!=INTERSECTION_FOUND)

{

// тест на попадание луча на асимптоту

if (fabs(x_step[view_angle])==0)

{

уrау = INTERSECTION_FOUND;

casting--;

dist_y=1e+8;

}

 

// вычислить

позицию карты

ceil_x = (long)(xi / CELL_X_SI2E);

cell_y = ( (y_bound + next_y_cell) / CELL_Y_SIZE) ;

// проверить, находится ли в этом месте блок

if ((y_hit_type = world[(WORLD_ROWS-1) - cell_y] [cell_x] ) !=0)

{

// вычислить

расстояние

dist_y = (xi - х) * inv_cos_table[view angle];

xi_save = xi;

yb_save = y_bound;

// закончить вычисление Y-пересечения              

yray = INTERSECTION_FOUND;

casting--;                                           

} // конец обработки попадания луча на блок

else

{

// вычислить следующее Х-пересечение

xi += x_step,[view_angle];

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

else

} // конец проверки на отсечение по оси У

// перейти к следующей точке пересечения




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