Михаил Краснов - Графика DirectX в Delphi

Здесь есть возможность читать онлайн «Михаил Краснов - Графика DirectX в Delphi» — ознакомительный отрывок электронной книги совершенно бесплатно, а после прочтения отрывка купить полную версию. В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Графика DirectX в Delphi: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Графика DirectX в Delphi»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Графика DirectX в Delphi — читать онлайн ознакомительный отрывок

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Графика DirectX в Delphi», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

type

// Формат вершин для треугольников окружения

TNormDiffTextVertex = packed record

X, Y, Z : Single;

nX, nY, nZ : Single;

DColor : DWORD;

U, V : Single;

end;

// Формат вершин для треугольников человечков

TNormVertex = packed record

X, Y, Z : Single;

nX, nY, nZ : Single;

end;

// Отдельный треугольник описания окружения

TTriangle '= record

NumTexture : Integer; // Номер текстуры

DIFFUSE : DWORD; // Диффузная составляющая треугольника

end;

const

// FVF-флаг для треугольников окружения

D3DFVF_NORMDIFFTEXTVERTEX = D3DFVF_XYZ or D3DFVF_NORMAL or

D3DFVF_DIFFUSE or D3DFVFJTEX1; // FVF-флаг для треугольников человечков

D3DFVFJSIORMVERTEX = D3DFVF_XYZ or D3DFVFJTORMAL;

// Имя файла с описанием мира

WorldFile = 'Data/World.txt';

// Имя файла с треугольниками символов, для вывода FPS

NumbersFile = 'Data/Numbers.txt';

// Количество треугольников в описании окружения

NumTriangles = 58;

($1 legoman.pas) // Данные модели

var

frmD3D: TfrmD3D;

Frames : Integer =0; // Счетчик кадров

FpsOut : String = ''; // Значение FPS

// Вспомогательная матрица, для вывода символов FPS

LetTrans : TDSDMatrix;

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

TexPointer : Pointer;

// Характеристики образа текстуры

wrkTexWidth, wrkTexHeight :

Integer;

// Флаг, выводить ли FPS

flgFPS : BOOL = True;

// Угол зрения по вертикали

Lookupdown : Single = 0.0;

// Вспомогательный вектор для оптимизации

ZVector : TD3DVector;

// Угол зрения по горизонтали и положение игрока

RotY, XPos, ZPos : Single;

// Массив описания мира

World : Array [0..NumTriangles - 1] of TTriangle;

// Переменные для обработки устройств ввода

DInput : IDIRECTINPUT8 = nil;

DIMouse : IDIRECTINPUTDEVICE8 = nil;

DIKeyboard : IDirectlnputDeviceS;

KeyBuffer : TDIKeyboardState;

// Угол поворота красного человечка

Angle : Single = 0.0;

// Угол поворота конечностей человечков

AngleFoot : Single = 0.0;

StepFoot : Single = 0.1;

// Тестовая точка для определения столкновений с препятствиями

TestPointX, TestPointY : DWORD;

В файле описания окружения данных идут в следующем порядке:

строка комментария; номер текстуры; цвет треугольника; три строки описания вершин треугольника, которые включают координаты в пространстве; нормаль и текстовые координаты каждой вершины треугольника.

*

Вот что записано в текстовом файле для первого треугольника:

// Потолок

4

$00FF0000

-3.0 1.0 3.0 0.0 -1.0 0.0 0.0 0.0

-3.0 1.0 -3.0 0.0 -1.0 0.0 0.0 12.0

1.0 3.0 0.0 -1.0 0.0 12.0 0.0

Пол и потолок комнаты представляют собой квадраты с координатами точек углов по диагонали (-3; -3) и (3; 3). Координата Y для всех вершин пола нулевая, для вершин потолка - единичная. При считывании данных предусматриваем обработку исключений на случай отсутствия файла данных или присутствия ошибки при описании треугольников:

procedure TfrmD3D.SetupWorld;

var

t : TextFile;

i, j : Integer;

Vertices : /4TNormDiffTextVertex;

wrkStr : tring;

begin

if FileExists(WorldFile) then begin AssignFile(t, WorldFile);

try

Reset(t); FD3DVB.Lock(0, NumTriangles * 3 * SizeOf(TNormDiffTextVertex),

PByte(Vertices), 0) ;

for i := 0 to NumTriangles - 1 do begin

// Строка комментария, в программе не используется

ReadLn (t, wrkStr) ;

ReadLn (t, World[i].NumTexture); // Текстура треугольника

ReadLn (t, World[i].DIFFUSE); // Цвет вершин треугольника

for j := 0 to 2 do begin // Три вершины треугольника

ReadLn (t, Vertices.X, Vertices.Y, Vertices.Z,

Vertices.nX, Vertices.nY, Vertices.nZ,

Vertices.U, Vertices.V);

Vertices.DColor := World[i].DIFFUSE;

Inc(Vertices);

end;

end;

FD3DVB.Unlock;

except // Данные на треугольник заданы неверно

raise EAbort.Create ('Can''t read file: ' + WorldFile);

end;

CloseFile(t) ;

end else raise EAbort.Create ('Can''t read file: ' + WorldFile);

end;

При возникновении исключений программа завершается, описание ошибки выводится в текстовый файл.

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

Координаты игрока задаются значениями переменных xpos и Zpos, переменная RotY определяет угол поворота головы наблюдателя вокруг своей оси, а переменная Lookupdown - наклон головы по вертикали. Сразу после запуска игрок "располагается" в точке (0, 0, 0), направление взгляда параллельно оси X.

Текстуры треугольников задаются обычным образом, но текстуры, накладываемые на квадраты выходов из сектора, инициализируются отдельной функцией:

procedure TfrmD3D.FormCreate(Sender: TObject);

var

hRet : HRESULT;

matView, matProj : TD3DMatrix;

wrkMat : TDSDMatrix; // Вспомогательная матрица разворота человечков

begin

// Приложение полноэкранное, курсор отключаем

ShowCursor (False);

Randomize;

hRet := InitDSD;

if Failed (hRet) then ErrorOut ('InitD3D', hRet);

hRet := InitVB;

if Failed (hRet) then ErrorOut ('InitVertex', hRet);

try

InitVBLetter; // Считываются треугольники цифр

except // Возможно, файл удален

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Графика DirectX в Delphi»

Представляем Вашему вниманию похожие книги на «Графика DirectX в Delphi» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «Графика DirectX в Delphi»

Обсуждение, отзывы о книге «Графика DirectX в Delphi» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x