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


Новая версия масштабирования - часть 8


if (kbhit())

{

switch(getch()) {

case '.': // отдаляем корабль

{

z+=16;

} break;  

case ',':// приближаем корабль

{

z-=l6;

//не позволяем кораблю подойти слишком близко

if(Z<256)

z=256;

} break;

case

'q': // выход из программы

{

done=1;

} break;

default:break;

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

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

//рассчитываем размер растрового изображения

scale = (int)( scale_distance/z );

// исходя из размера растрового изображения,

// рассчитываем проекции координат Х и Y

object.x= (int)((float)x*view_distance / (float)z) + 160 - (scale>>1);

object.y = 100  - (((int)((float y*view_distanc=e / (float)z) + (scale>>1)));

// увеличиваем счетчик кадров

if

(++count==2)

{

count=0;

if (++object.curr_frame==12) object.curr_frame=0 ;

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

// очищаем дублирующий буфер

Clear_Double_Buffer();

// масштабируем

спрайт

Scale_Sprite((sprite_ptr)&object,scale);

Show_Double_Buffer(double_buffer);

// выводим информацию на экран

_settextposition(24,0) ;

printf("z Coordinate is %f",z);

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

// Удаляем файл PCX

PCX_Delete((pcx_picture_ptr) &text_cells);

// восстанавливаем текстовый режим

_setvideomode(_DEFAULTMODE);

} // конец функции main

После выполнения программы из Листинга 8.2, вы, возможно, будете удивлены возможностями оцифровки изображений макетов и приведенным вариантом трехмерной мультипликации. Кто знает, может быть вы создадите что-нибудь именно по типу игры Wing Commander, а вовсе не очередную вариацию DOOM? Однако пора переходить к алгоритму отсечения.




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