Инициализация в Direct3D 9.0
Важнейшим вопросом для начинающего в Direct3D есть инициализация и первый запуск пустого приложения с чёрным экраном)))
Код пустого приложения в SDK весьма сложен и непонятен для того, кто только начал программировать на D3D. Да и это только в том случае, если вам удалось скачать нормальную версию SDK. В противном случае (как в моем) вам придется начинать изучать Direct3D(д3д) самим и без помощи. Конечно же можно обратится к форумам и разнообразным сайтам, но этот процесс будет длится очень долго, и в конце концов не принесет желаемого результата.
Составив код из как минимум 5 книг и как максимум 127 сайтов, мне удалось написать простенький модуль на Visual C++ 6, который при подключении к проекту сам выполняет инициализацию. Вам нужно только прописать три простеньких процедуры и добавить соответствующие библиотеки к проекту. В модуле кроме самой инициализации, прописаны также освещение, текстурирование, материалы, а также несколько констант, которые упростят жизнь вам и вашим близким)))
Я предполагаю, что у того, кто читает эту статью есть хоть какое-то понятие о программировании на С++, и конечно же сам компилятор. Модуль и програмка-презентация были написаны на Visual C++ 6, так что лучше всего использовать именно этот компилятор. Сам .h-файл модуля можно скачать из вкладки Файлы->Program Files. Также предполагается, что у вас есть в наличии хоть какие-то папки Lib и Include с SDK, но если это не так, то их также можно скачать. Не уверен, что они из последней версии SDK, но это именно те, которые использую я (конечно же Direct3D 9.0). Я б с радостью выставил и сам SDK, но к сожалению осталось только 30 метров памяти на сайте. Постараюсь найти ссылку, с которой скачивал, и выставить как можно скорее.
Лично я познакомился c Visual C++, Direct3D, и вообще с самим языком С в один и тот же день, и вначале не понимал абсолютно ничего; хотя и сейчас понимаю далеко не всё))). Так что объяснять буду так, как хотел бы, чтобы объяснили мне в тот день. Ну, что ж, начнем!
Устанавливаем Visual C++6.
Скачиваем с этого сайта rar-архив includeh.rar и распаковываем куда-нибудь.
Скачиваем с того же сайта doomcross3d.rar и распаковываем в куда-нибудь2 или в тот же куда-нибудь))).
Скачиваем с этого сайта rar-архив dinamic.rar и распаковываем в куда-нибудь3.
Запускаем Visual C++...
А дальше начинается самое интересное. Во-первых, нужно указать где находятся наши DoomCoross®3D.h а также Lib и Include, чтобы компилятор мог найти путь к ним. Так что выбираем Tools->Options->Directories жмем на Show directories for: и выбираем Include files. Жмем на кнопку New, которая находится сразу же под этой вкладкой. Дальше нажимаем на три точки, которые появляются около пустого поля; выбираем папку Include, которая должна находится в //куда-нибудь(или где-то в другом месте))). Потом опять жмем New. Точно так же указываем путь к DoomCross®3D.h. После этой сложнейшей операции жмем еще раз Show directories for: и теперь выбираем Library files. Указываем в трёх точках путь к папке Lib. После этих действий нажимаем ОК и навсегда забываем об этом окне)))
Далее... Сам проект в С++6 состоит из Workspace`а и C++ Source file`а, а также многих других файлов(.h .cpp), которые подключаются к Workspace. Так что теперь создаем Workspace. Для этого жмем File->New->Projects и выбираем Win32 Application, то есть создаем проект под платформу Windows. Вводим что-нибудь в Project name. Например INIT. Кликаем ОК, потом появляется окно, которое не читаем и быстро жмем Finish))), потом опять появляется окно, на котором нужно нажать ОК. Теперь у нас создан новый проект. Нужно создать также .cpp файл, в котором собственно мы и будем вводить сам текст программки. Так что нажимаем File->New->Files, выбираем C++ Source file, и вводим что-то в File name, например INIT_SRC.
Мы создали проект и добавили к нему файл. Дальше – круче))) Нам нужно вставить в папку с нашей программкой файл под названием d3dx9_32.dll, который мы распаковали в куда-нибудь3. То есть копируем его и вставляем в РАСПОЛОЖЕНИЕС++:\MyProjects\ПАПКА С НАЗВАНИЕМ ПРОЕКТА(в нашем случае например INIT)\Debug , которая на данный момент является пустой.
Пока что всё идет нормально и без глюков. Но это только пока))) Теперь подключаем к проекту нужные библиотеки. Жмем Project->Settings->Link; туда, где написано Object/library modules: вставляем следующее: d3d9.lib d3dx9.lib и жмем ОК. Эти библиотеки нужно подключать каждый раз при создании нового проекта, иначе он не будет работать.
Наконец-то все приготовления завершены и можно приступать к программированию. Для этого копируем следующий код и вставляем в текстовое окно нашей программы:
//------------------------------------------------------------------------------
#include <DoomCross®3D.h>
void OPTIONS ()
{
GAMENAME="Doom†Cross Software®";
}
void LOADING ()
{
D3DXMatrixPerspectiveFovLH(&PROJ, D3DX_PI * 0.6f, 1.3f, 1.0f, 10000.0f);
DEVICE->SetTransform(D3DTS_PROJECTION, &PROJ);
}
void RENDER ()
{
DEVICE->Clear( 0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 0, 1.0f, 0 );
DEVICE->BeginScene();
DEVICE->EndScene();
DEVICE->Present(0, 0, 0, 0);
if (KEYS[VK_ESCAPE]) {SendMessage(hWnd,WM_CLOSE,0,0);}
}
//------------------------------------------------------------------------------
В принципе, если сейчас скомпилировать проект, то экран почернеет, и станет весело))), то есть теперь вы относитесь к той небольшой части населения нашей планеты, кому удалось инициализировать Direct3D!!! Чтобы скомпилировать приложение жмем Build->Execute, если что-то появляется жмем ОК. Чтобы выйти из приложения нажимаем Esc.
Весьма просто по сравнению с тем, что вы видели до этого времени, не так ли? Теперь объясню работу программки.
Функция OPTIONS запускается перед началом программы, то есть до инициализации д3д. В ней мы задаем название приложения. В ней также можно задавать например, размеры окна или что-то еще, но это пока не прописано в модуле.
Функция LOADING запускается после инициализации д3д. Здесь задается матрица проекции. В ней можно также задавать освещение, материалы, загружать текстуры… и т. д. и т. п.)))
Функция RENDER запускается постоянно. В ней очищается экран, и записана функция выхода при нажатии Esc. Здесь происходит вся работа по прорисовке изображения. Если вы хотите что-то нарисовать, то делать это нужно именно здесь, а точнее между DEVICE->BeginScene(); и DEVICE->EndScene();
Более детально все функции, которые используются в программке, описаны в книгах, которые качаем с этого сайта. Подробное рассмотрение модуля DoomCross®3D.h обязательно будет в следующих статьях. Все доработки будут выставлены на сайте.
Doom†Cross. 09.12.2007.
|