В случае, когда имело место пересечение с горизонтальной стеной, параметр / переворачивается, если ордината точки пересечения меньше ординаты наблюдателя, для вертикальной стены - если абсцисса точки пересечения меньше абсциссы наблюдателя.

Индекс столбца текстуры определяется по формуле

Компьютерная графика. Полигональные модели

В данном случае достаточно просто произвести побитовый сдвиг; к примеру, если / задано в представлении 16.16, h = 1 , a picWidth = 64 , то

j = (int)(t» 10).

Для осуществления сжатия можно воспользоваться либо алгоритмом Брезен-хейма, либо дробными числами. Последний подход предпочтительнее, так как в большинстве случаев коэффициент сжатия больше единицы и алгоритм Брезенхей-ма приводит к многократным записям в один и тот же пиксел экрана.

Несложно видеть, что подобный подход дает действительно правильное перспективное проектирование текстуры, причем ценой совсем небольших затрат - все необходимые параметры для произведения сжатия можно взять из таблиц.

Модифицированная соответствующим образом программа приведена ниже.

jmj II File wolf4.cpp #include <bios.h> #include <dos.h> #include <math.h> #include <stdio.h> #include <time.h> #include "fixmath.h" #include "bmp.h"
#define VIEW_WIDTH (M_.PI / 3) // viewing angle ( 60 degrees )
#define SCREEN_WIDTH 320 // size of rendering window
#define SCREEN_HEIGHT 200 //basic colors
#define FLOOR_COLOR 140
#define CEILING_COLOR 3 // bios key defrntions
#define ESC 0x011b
#define UP 0x4800
#define DOWN 0x5000
#define LEFT 0x4b00
#define RIGHT 0x4d00 //labyrinth
char * worldMap [] =
{

и****************************************************и

I
h* * *»
I
I* ********* ************************** *
i

ii* * *и

I

и* ********* * ************************ *n

I
II* * *n
I
II* ********* ************************** *ll II* * *>
11************************^****************************11

⇐ Предыдущая| |Следующая ⇒