Построение отрезков
Библиотека Direct3D имеет в своем составе средства для построения связных отрезков, которые кроме всего прочего имеют толщину и стиль. Для вывода подобных примитивов (линий) предусмотрен интерфейс ID3DXLine. Для начала необходимо объявить нужные переменные интерфейсного типа.
C++ | ID3DXLine *line = NULL; |
Pascal | var line: ID3DXLine; |
Создание объекта "линия" осуществляется с помощью вызова функции D3DXCreateLine, которая имеет два параметра: первый – указатель на устройство вывода, второй адрес переменной, в которую запишется результат.
C++ | D3DXCreateLine(&device, &line); |
Pascal | D3DXCreateLine(device, line); |
Интерфейс ID3DXLine содержит несколько методов для работы для рисования линий. Для вывода обычного отрезка на экран необходимо задать координаты его концевых точек. Объявим дополнительную переменную-массив, в которой и будет храниться эта информация.
C++ | D3DXVECTOR2 points[] = { (100.0f, 100.0f), (200.0f, 200.0f) }; |
Pascal var | points: array[0..1] of TD3DXVector2 = ( (x:100; y:100), (x:200; y:200) ); |
Тип D3DXVECTOR2 представляет собой запись из двух вещественных полей, описывающих точку (вектор) в двумерном пространстве.
Непосредственный вывод отрезка заключается в вызове метода Draw интерфейса ID3DXLine. Данный метод имеет три параметра: первый – указатель на массив точек, второй аргумент определяет их количество, а третий – цвет выводимой линии.
C++ | line->Draw(points, 2, D3DCOLOR_XRGB(255,255,0)); |
Pascal | line.Draw(@points, 2, D3DCOLOR_XRGB(255,255,0)); |
Принято вызов Draw обрамлять вызовами методов Begin и End до и после соответственно.
Метод Begin подготавливает устройство вывода к процессу формирования линий, а метод End восстанавливает состояние устройства вывода в изначальное.
C++ |
line->Begin(); line->Draw(…); line->End(); |
Pascal |
line._Begin; line.Draw(…); line._End; |
Наличие лидирующего символа подчеркивание у методов Begin и End в синтаксисе Паскаля обусловлено тем, что они являются ключевыми словами в данном языке.
Для установки нужной ширины рисуемой линии интерфейс ID3DXLine обладает методом SetWidth(), в качестве параметра которому передается значение ширины линии в пикселях.
Например, вывод отрезка прямой линии толщиной 5 пикселей осуществляется с помощью такого кода:
C++ | … line->SetWidth(5.0f); line->Draw(points, 2, D3DCOLOR_XRGB(255,255,0)); |
Pascal | … line.SetWidth(5); line.Draw(@points, 2, D3DCOLOR_XRGB(255,255,0)); |
line->SetWidth(1.0f); | line->SetWidth(3.0f); |
line->SetWidth(5.0f); | line->SetWidth(10.0f); |
line->SetAntialias(false); |
line->SetAntialias(true); |
N=4 | |
N=5 | |
N=7 | |
N=10 | |
N=20 |