Тем самым горизонтальные поверхности следует рисовать на экране горизонтальными линиями на экране.

Рассмотрим упрощенную задачу: наблюдатель находится па высоте h над плоскостью с нанесенной на нее текстурой, и больше ничего на плоскости нет. Пусть направление взгляда наблюдателя составляет угол <р с осью параметра и (рис. 13.10).

Компьютерная графика. Полигональные модели Прообразом произвольной строки экрана па плоскости будет отрезок прямой, чем угол этой прямой с направлением оси и будет ср + я/2.

Найдем расстояние вдоль плоскости Оху до этой прямой и ближайшую точку на

где к - номер строки от конца экрана, а 8 - шаг по вертикали между строками экрана.

Ближайшая точка находится из соотношений х = х* + d cos <р, У - У* + d sin (p.

Коэффициент сжатия пропорционален расстоянию, т. е. равен Cd, где С - некоторый масштабирующий коэффициент.

Для построения строки необходимо найти индекс текстуры (и, v) для какой-либо точки данной строки и шаги для обоих индексов при переходе к соседнему пикселу строки. Индекс легко находится из формулы и = [х * picWidth] % picWidth

v = [у * picHeight] % picHeight

Шаги, вдоль индексов текстуры определяются из следующих соотношений Аи - Cd sin <р, Av - -Cd cos ср.

Ниже приводится вещественная версия программы, осуществляющая текс рование горизонтальной плоскости.

2) // File Floor.cpp
#include <bios.h>
#include <dos.h>
#include <math.h>
#include <mem.h>
#include <stdio.h>
#include <time.h>
include "bmp.h"
#define SKY_COLOR 3
#define ESC 0x011b
#define UP 0x4800
#define DOWN 0x5000
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define H 100.0
#define DELTA 1.0 // note : DELTA * NumLines == H

#define С 0.01

#define DO 100.0 
Элементы виртуальной реальное

13. Элементы виртуальной реальное

long totalFrames = 01;
BMPImage* pic = new BMPImage ("FLOOR.BMP" );
char far * screenPtr = (char far *) MK_FP ( OxAOOO, 0 );

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