Пятница, 2024-03-29, 10:53 AM
Приветствую Вас Гость | RSS
MENgine 3D
Главная страница | Каталог статей | Регистрация | Вход
Форма входа

Меню сайта
Категории каталога
Мои статьи [2721]
Уроки DirectX [1]
В этой категории статей будут показаны примеры работы с использованием Delphi + DirectX
Уроки OpenGL [0]
В этой категории статей будут показаны примеры работы с использованием Delphi + OpenGL
Поиск по каталогу
Друзья сайта
Наш опрос
стоит ли писать движек на Delphi?
Всего ответов: 66
Статистика
Начало » Статьи » Уроки DirectX

Урок 1.
Урок1 - Инициализация Direct3D
Начнем наш путь с простейшего примера - клиентская часть окна будет окрашиваться синим цветом. Это минимальное приложение, использующее Direct3D. Окно непрерывно перерисовывается, а в его заголовке выводится значение FPS (Frames Per Second).

Прежде всего, заметим, что в список uses вписан модуль DirectXGraphics. Это базовый модуль, который будет использоваться во всех ваших дальнейших программах. В этом модуле содержится описание базовых интерфейсов, типов и констант.

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

function TfrmD3D.InitD3D : HRESULT;
var
d3ddm : TD3DDISPLAYMODE;
d3dpp : TD3DPRESENT_PARAMETERS;
hRet : HRESULT;
begin
FD3D := nil;
FD3DDevice := nil;

FD3D := Direct3DCreate8(D3D_SDK_VERSION);
if FD3D = nil then begin
Result := E_FAIL;
Exit;
end;

hRet := FD3D.GetAdapterDisplayMode(D3DADAPTER_DEFAULT, d3ddm);
if FAILED(hRet) then begin
Result := hRet;
Exit;
end;

ZeroMemory(@d3dpp, SizeOf(d3dpp));
with d3dpp do begin
Windowed := True;
SwapEffect := D3DSWAPEFFECT_DISCARD;
BackBufferFormat := d3ddm.Format;
end;

Result := FD3D.CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, Handle,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
d3dpp, FD3DDevice);
end;

Сразу обратим внимание на объекты FD3D и FD3DDevice. FD3D является главным интерфейсом D3D. По сути это COM-объект класса IDIRECT3D8, его методы позволяют получить доступ ко всем методам и объектам рассматриваемой библиотеки. Для создания главного объекта используется функция Direct3DCreate8. Эта функция имеет единственный аргумент - константа, сообщающая системе, какая версия DirectX SDK использовалась при компиляции приложения. Обратите внимание, что перед вызовом функции FD3D необходимо обнулить.

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

Методы главного объекта позволяют узнать текущие установки видеосистемы. Далее в примере мы вызываем метод GetAdapterDisplayMode. Данный метод имеет два параметра: первый - константа, задающая адаптер для которого запрашиваются установки, а второй - указатель на вспомогательную переменную(d3ddm), в которую помещается результат нашего запроса. В примере используется константа D3DADAPTER_DEFAULT - это нулевая константа, соответствующая первичному устройству (т.е. в нашем случае - видеорежиму рабочего стола Windows). Замечу, что вызов этого метода является необходимым только для создания оконных приложений, поскольку такие установки требуются для задания параметров заднего буфера.

На следующем шаге работы заполняются поля структуры типа TD3DPRESENT_PARAMETERS. Здесь выполняются только действия, необходимые для работы приложения. Поле Windowed задает тип приложения: оконное или полноэкранное. Значение True задает оконный режим работы. В поле SwapEffect заносится константа, задающая порядок работы с задним буфером. Константа D3DSWAPEFFECT_DISCARD соответствует режиму, при котором DirectX не заботится о сохранности содержимого заднего буфера при циклическом переключении страниц. Поле BackBufferFormat используется для задания формата пиксела для заднего буфера. Обратите внимание, что здесь используется значение, полученное на предыдущем шаге работы.

Последним действием инициализации графической системы является создание объекта устройства. В нашем примере это COM-объект класса IDIRECT3DDEVICE8. Для его создания используется метод CreateDevice главного объекта. У метода шесть аргументов. Первым является устройство вывода, используемая здесь константа нам уже знакома. Константа D3DDEVTYPE_HAL задает тип воспроизведения при котором используется аппаратное ускорение. Использование других констант возможно, но скорость работы будет настолько низкой, что пользователи вряд ли останутся удовлетворенными. Третий аргумент является идентификатором окна на которое осуществляется графический вывод. Мы здесь используем свойство handle формы приложения. Четвертый аргумент - константа, задающая режим работы с вершинами. Используемая нами константа D3DCREATE_SOFTWARE_VERTEXPROCESSING соответствует режиму при котором вершины обрабатываются центральным процессором (а не ускорителем). Это делается для того, чтобы наши приложения работали со всех графических картах. Пятый аргумент нам также уже знаком, мы передаем заполненную нами выше структуру. И, наконец, последний шестой аргумент собственно формируемый объект. С помощью его методов и производятся воспроизведение и модификация изображения.

Процедура инициализации вызывается при создании окна.

procedure TfrmD3D.FormCreate(Sender: TObject);
var
hRet : HRESULT;
begin
hRet := InitD3D;
if Failed (hRet) then ErrorOut ('InitD3D', hRet);
end;

--------------------------------------------------------------------------------

Категория: Уроки DirectX | Добавил: mengine (2006-12-08) | Автор: Maxim
Просмотров: 2298 | Комментарии: 3 | Рейтинг: 0.0

Всего комментариев: 2
2 Михаил  
0
кинь ссылку на сайт как игру на delphi сделать? с помощью directx3d или на край opengl заранее спасибо

1 warik  
0
мужик я знаю что ты старался но на формах ща никто игры неделает
юрзай api
я вот игру уже 3 месяц на дирексте делаю пока успешно ибо delphi рулит))

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Copyright MyCorp © 2006