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


         

Изображение текстуры - часть 2


Листинг 19.2. Си-версия программы для рисования фрагмента тек-стуры.

Render Sliver(sprite_ptr sprite,int scale, int column)

{

// Это обновленная версия функции рисования фрагмента текстуры.

// Она использует справочные таблицы с предварительно рассчитанными

// индексами масштабирования. В конце концов, я переписал ее

// на ассемблере из соображений скорости работы.

char far *work_sprite;

int far *row;

int work offset=0,offset,y,scale_off;

unsigned char data;

// Устанавливаем указатель на соответствующую строку

// справочной таблицы row = scale_table[scale];

if (scale>(WINDOW_HEIGHT-1))

{ scale_off = (scale-(WINDOW_HEIGHT-1))>>1;

scale=(WINDOW_HEIGHT-l);

sprite->y = 0;

}

// Устанавливаем указатель на спрайт для облегчения доступа

work_sprite = sprite->frames[sprite->curr_frame];

// Вычисляем смещение спрайта в видеобуфере

offset = (sprite->y << 8) + (sprite->y <<6) + sprite->x;

for(y=0;y<scale; y++)

{

double_buffer[offset] = work_sprite[work_offset+column];

offset  += SCREEN_WIDTH;

work_offset = row[y+scale_off];

} // Конец цикла for

) // Конец функции

Листинг 19.3. Ассемблерная версия программы рисования фрагмента текстуры (SLIVER.ASM).

; Эта функция является ассемблерной версией

; аналогичной функции на Си

; Она использует заранее вычисленные таблицы

; для увеличения скорости работы

;////////////////////////////

.MODEL MEDIUM, С             ; Используем модель MEDIUM

.CODE                       ; Начало сегмента кода

            EXTRN double_buffer;DWORD   ; Буфер в оперативной памяти

            EXTRN sliver_texture:DWORD  ; Указатель на текстуру

            EXTRN sliver_column:WORD    ; Текущий столбец текстуры

            EXTRN sliver_top:WORD       ; Начальная вертикальная позиция

            EXTRN sliver_scale:WORD     ; Общая высота текстуры

            ЕХТRN sliver_ray:WORD       ; Текущий столбец экрана

            EXTRN sliver_clip:WORD      ; Какая часть текстуры отсекается?




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