Секреты программирования игр


         

Новый отсекатель лучей - часть 4


casting--;

} // Конец обработки наличия блока

else

// Рассчитываем следующее пересечение по Y

{

yi += y_step[view_angle];

// Ищем следующую возможную Х-координату пересечения

x_bound += x_delta;

} // Конец else

}

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

if (уray !=INTERSECTION_FOUND)

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

cell x = xi;

cell_x>>=CELL_X_SIZE_FP;

cell_y = ( (y_bound + next_y_cell) >> CELL_Y_SIZE_FP) ;

// Проверяем, не находится ли в текущей позиции блок

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

// Вычисляем расстояние

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

xi_save = (int)xi;

yb_save = у_bound;

у_ray = INTERSECTION_FOUND;

casting--;

} // Конец обработки наличия блока

else

{ // Прекращаем расчет по оси Y

xi += x_step[view angle];

// Вычисляем следующую возможную линию пересечения

у_bound += у_delta;

} // Конец else

}

} // Конец while

// СЕКЦИЯ 6 /////////////////////////////////

// На этом этапе мы вычислили точки пересечения с

// горизонтальными и вертикальными стенами. Теперь

// определяем, которая из них ближе

if (dist_x < dist_y)

{

// Вертикальная стена ближе

// Рассчитать масштаб и умножить его на поправочный

// коэффициент для устранения сферических искажений

scale = (int)(cos_table[ray]/dist_x);

// Отсечь фрагмент текстуры

if (scale>(MAX_SCALE-1)) scale=(MAX_SCALE-1);

scale_row = scale_table[scale-1];

if (scale>(WINDOW_HEIGHT-1))

{

sliver_clip = (scale-(WINDOW_HEIGHT-1)) >> 1;

scale=(WINDOW_HEIGHT-l) ;

}

else

sliver_clip =0;

sliver_scale = scale-1;

// Установить параметры для ассемблерной процедуры

sliver_texture = object.frames[x_hit_type];

sliver_column = (yi_save & 0х00ЗF);

sliver_top     = WINDOW_MIDDLE - (scale >> 1);.

sliver_ray     = ray;

// Отобразить фрагмент текстуры

Render_Sliver_32();

} // Конец if

else

// горизонтальная стена ближе

{

//Рассчитать масштаб и умножить его на поправочный

//коэффициент для устранения сферических искажений




Содержание  Назад  Вперед