Чтение онлайн

на главную - закладки

Жанры

Графика DirectX в Delphi

Краснов Михаил

Шрифт:

begin

Timer; // Пересчет текущих значений углов поворота конечностей

// Икосаэдр головы

SetTranslateMatrix(matTranslate, 0.0, -3.0, 0.0);

// Масштабируем единичный многогранник

SetScaleMatrix (matScale, 0.5, 0.5, 0.5);

matWrk := MatrixMul(matScale, matTranslate);

with FDSDDevice do begin

SetTransform(D3DTS_WORLD, matWrk);

SetMaterial(MaterialYellow); // Желтого цвета

DrawPrimitive(D3DPT_TRIANGLELIST, 0, 20);

end;

//

Цилиндры левой ноги

SetTranslateMatrixfmatTranslate, -0.2, 0.0, 0.0);

SetRotateXMatrix(matRotateX, L_foot_up_angle);

// Запоминаем положение верхней части

matWrk := MatrixMul(matTranslate, matRotateX);

with FD3DDevice do begin

SetTransform(D3DTS_WORLD, matWrk);

SetMaterial(MaterialBlue); // Ноги - синего цвета

// Цилиндр единичной длины

DrawPrimitive(D3DPT_TRIANGLESTRIP, 60, 98);

end;

// Перемещаемся к концу цилиндра единичной длины

SetTranslateMatrix(matTranslate, 0.0, 1.0, 0.0);

// Поворот нижней части конечности

SetRotateXMatrix(matRotateX, L_foot_down_angle);

// Трансформации осуществляются относительно предыдущего состояния

// системы координат

matWrk := MatrixMul(matWrk, MatrixMul(matTranslate, matRotateX));

with FD3DDevi do begin

SetTransform(D3DTS_WORLD, matWrk);

DrawPrimitive(D3DPT_TRIANGLESTRIP, 60, 98);

end;

// Правая нога

SetTranslateMatrixfmatTranslate, 0.2, 0.0, 0.0);

SetRotateXMatrix(matRotateX, R_foot_up_angle);

// Запоминаем текущее положение верхней части правой ноги

matWrk := MatrixMul(matTranslate, matRotateX);

with FDSDDevice do begin

SetTransform(D3DTS_WORLD, matWrk);

DrawPrimitive(D3DPT_TRIANGLESTRIP, 60, 98);

end;

// Трансформации в новой системе координат

SetTranslateMatrix(matTranslate, 0.0, 1.0, 0.0);

SetRotateXMatrix(matRotateX, R_foot_down_angle);

// Поворот и сдвиг - относительно текущей трансформации

matWrk := MatrixMul(matWrk, MatrixMul(matTranslate, matRotateX));

with FD3DDevice do begin

SetTransform(D3DTS_WORLD, matWrk);

DrawPrimitive(D3DPT_TRLANGLESTRIP, 60, 98);

end;

// Туловище

// Цилиндр с левой стороны туловища

SetTranslateMatrix(matTranslate, -0.2, 0.0, 0.0);

SetRotateZMatrix(matRotateZ, 5 * Pi / 6) ;

with FD3DDevice do begin

SetTransform(D3DTS_WORLD, MatrixMul(matTranslate, matRotateZ));

SetMaterial(MaterialGreen); // Текущий цвет - зеленый

DrawPrimitive(D3DPT_TRJANGLESTRIP, 60, 98);

end;

//

Цилиндр правой части туловища

SetTranslateMatrix(matTranslate, 0.2, 0.0, 0.0);

SetRotateZMatrix(matRotateZ, -5 * Pi / 6);

FD3DDevice.SetTransform(D3DTS_WORLD,

MatrixMul(matTranslate, matRotateZ));

FD3DDevice.DrawPrimitive(D3DPT_TRIANGLESTRIP, 60, 98);

// Цилиндр верхней части туловища

SetTranslateMatrix(matTranslate, -1.0, -1.0, 0.0);

SetScaleMatrix (matScale, 1.0, 2.0, 1.0); // Растягиваем цилиндр

SetRotateZMatrix(matRotateZ, Pi / 2);

FD3DDevice.SetTransform(D3DTS_WORLD, MatrixMul(matRotateZ,

MatrixMul(matTranslate, matScale)));

FD3DDevice.DrawPrimitive(D3DPT TRIANGLESTRIP, 60, 98);

// Цилиндр нижней части туловища

SetTranslateMatrix(matTranslate, 0.0, -0.25, 0.0);

SetScaleMatrix (matScale, 1.0, 0.5, 1.0); // Уменьшаем цилиндр

SetRotateZMatrix(matRotateZ, Pi / 2) ;

FD3DDevice.SetTransform(D3DTS_WORLD, MatrixMul(matRotateZ,

MatrixMul(matTranslate, matScale)));

FD3DDevice.DrawPrimitive(D3DPT_TRIANGLESTRIP, 60, 98);

// Левая рука

// Верхняя часть

SetTranslateMatrix(matTranslate, -1.0, -1.0, 0.0);

SetRotateZMatrix(matRotateZ, R_hand_up_angle);

matWrk := MatrixMul(matTranslate, matRotateZ);

with FD3DDevice do begin

SetTransform(D3DTS_WORLD, matWrk);

SetMaterial(MaterialRed); // Текущий цвет - красный

// Цилиндр длиной 0.75

DrawPrimitive(D3DPT_TRIANGLESTRIP, 160, 98);

end;

// Сдвигаемся к концу цилиндра

SetTranslateMatrix(matTranslate, 0.0, 0.75, 0.0);

SetRotateZMatrix(matRotateZ, R_hand_down_angle);

matWrk := MatrixMul(matWrk, MatrixMul(matTranslate, matRotateZ));

with FD3DDevice do begin

SetTransform(D3DTS_WORLD, matWrk);

DrawPrimitive(D3DPT_TRIANGLESTRIP, 160, 98);

end;

// Правая рука

SetTranslateMatrix(matTranslate, 1.0, -1.0, 0.0);

SetRotateZMatrix(matRotateZ, L_hand_up_angle);

matWrk := MatrixMul(matTranslate, matRotateZ);

with FD3DDevice do begin

SetTransform(D3DTS_WORLD, matWrk);

DrawPrimitive(D3DPT_TRIANGLESTRIP, 160, 98);

end;

SetTranslateMatrix(matTranslate, 0.0, 0.75, 0.0);

SetRotateZMatrix(matRotateZ, L_hand_down_angle);

matWrk := MatrixMul(matWrk, MatrixMul{matTranslate, matRotateZ));

with FDSDDevice do begin

SetTransform(D3DTS_WORLD, matWrk);

DrawPrimitive(D3DPT_TRIANGLESTRIP, 160, 98);

Поделиться:
Популярные книги

Сын Тишайшего

Яманов Александр
1. Царь Федя
Фантастика:
попаданцы
альтернативная история
фэнтези
5.20
рейтинг книги
Сын Тишайшего

"Искажающие реальность" Компиляция. Книги 1-14

Атаманов Михаил Александрович
Искажающие реальность
Фантастика:
боевая фантастика
космическая фантастика
киберпанк
рпг
5.00
рейтинг книги
Искажающие реальность Компиляция. Книги 1-14

Школа. Первый пояс

Игнатов Михаил Павлович
2. Путь
Фантастика:
фэнтези
7.67
рейтинг книги
Школа. Первый пояс

Невеста на откуп

Белецкая Наталья
2. Невеста на откуп
Фантастика:
фэнтези
5.83
рейтинг книги
Невеста на откуп

Убивать чтобы жить 2

Бор Жорж
2. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 2

Вперед в прошлое!

Ратманов Денис
1. Вперед в прошлое
Фантастика:
попаданцы
5.00
рейтинг книги
Вперед в прошлое!

Аргумент барона Бронина 4

Ковальчук Олег Валентинович
4. Аргумент барона Бронина
Фантастика:
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Аргумент барона Бронина 4

Измена. (Не)любимая жена олигарха

Лаванда Марго
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. (Не)любимая жена олигарха

Измена. Право на обман

Арская Арина
2. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Право на обман

Бастард Императора. Том 7

Орлов Андрей Юрьевич
7. Бастард Императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бастард Императора. Том 7

Жаба с кошельком

Донцова Дарья
19. Любительница частного сыска Даша Васильева
Детективы:
иронические детективы
8.26
рейтинг книги
Жаба с кошельком

Бастард Императора. Том 11

Орлов Андрей Юрьевич
11. Бастард Императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бастард Императора. Том 11

Академия чаросвет. Тень

Ярошинская Ольга
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Академия чаросвет. Тень

Наследие Маозари 4

Панежин Евгений
4. Наследие Маозари
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Наследие Маозари 4