» » » Сергей Ваткин - DirectX 8. Начинаем работу с DirectX Graphics


Авторские права

Сергей Ваткин - DirectX 8. Начинаем работу с DirectX Graphics

Здесь можно скачать бесплатно "Сергей Ваткин - DirectX 8. Начинаем работу с DirectX Graphics" в формате fb2, epub, txt, doc, pdf. Жанр: Программирование. Так же Вы можете читать книгу онлайн без регистрации и SMS на сайте LibFox.Ru (ЛибФокс) или прочесть описание и ознакомиться с отзывами.
Рейтинг:
Название:
DirectX 8. Начинаем работу с DirectX Graphics
Издательство:
неизвестно
Год:
неизвестен
ISBN:
нет данных
Скачать:

99Пожалуйста дождитесь своей очереди, идёт подготовка вашей ссылки для скачивания...

Скачивание начинается... Если скачивание не началось автоматически, пожалуйста нажмите на эту ссылку.

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

Как получить книгу?
Оплатили, но не знаете что делать дальше? Инструкция.

Описание книги "DirectX 8. Начинаем работу с DirectX Graphics"

Описание и краткое содержание "DirectX 8. Начинаем работу с DirectX Graphics" читать бесплатно онлайн.








GameDev.ru

DirectX 8: Начинаем работу с DirectX Graphics

Автор: voxatu

(пример написан на основе первого "родного" туториала к DirectX SDK 8.0)

Ну, наконец-то мы дошли до самой сути, а именно - до начала работы непосредственно с DirectX! Сейчас напишем вместе прогу, которая создаст класс, окошко, инициализирует объекты Direct3D и… в итоге у нас получится — сами увидите что :-) Советую СКАЧАТЬ ПРИМЕР в архиве и читать дальше, имея исходники перед глазами. Чтобы открыть пример, необходимо сначала разархивировать его в отдельную директорию, затем нажать File->Open Workspace и открыть файл "D3D Init.dsw" из этой директории. Ну… поехали.

Сначала необходимо написать include'ы, описать глобальные переменные, которые мы будем использовать в программе, а также объявить прототипы функций:

//Включаем все функции, необходимые для работы с D3D.

//<windows.h> уже включен в этом файле

#include <d3d8.h>

#include <stdio.h> //В дальнейшем нам понадобится функция sprintf()

LPDIRECT3D8 g_pD3D = NULL; //Понадобится нам, чтобы создать D3DDevice


//Это наше устройство rendering'а (Rendering Device)

LPDIRECT3DDEVICE8 g_pd3dDevice = NULL;

WNDCLASSEX wclass;

//Объявляем прототипы функций

VOID Init(HWND); //Инициализация D3D

VOID Render(); //Рендеринг сцены

VOID Sweep(); //Очистка после выполнения программы

//Обработка сообщений, поступивших окну

LRESULT CALLBACK MessageProc(HWND, UINT, WPARAM, LPARAM);

Что же такое Render? "Render" с английского переводится как: "переводить", "просчитывать", "визуализировать". Все объекты, которые находятся на нашей виртуальной сцене, хранятся в памяти в виде отдельных блоков: источники света, каркас, состоящий из вершин (точка в 3-D пространстве), текстуры, и т.д. Но видеокарта не может все это показать на экране, т.к. может вывести только последовательность разноцветных точек. Rendering Device как раз и выполняет эту функцию, т.е. преобразует всю нашу сцену в "понятный" для видеокарты вид.

В своих статьях я не буду переводить некоторые английские термины на русский язык, а буду их "руссифицировать" (например, я не буду переводить "rendering device", как "делательное устройство" или "устройство просчёта", а буду просто говорить "устройство рендеринга" или вообще "девайс для рендеринга" (всякое может случиться %) )). Дело не в том, что я не могу подобрать тому или иному английскому термину русский эквивалент. Просто иногда лучше пользоваться "родными" названиями (мы же не называем "Visual C" Визульным Си =-)). Едем дальше…

В нашей программе будет пять функций: функция WinMain(), Init(), Render(), Sweep() и функция обработки сообщений MessageProc(). Каждая функция представляет собой некий блок программы, который выполняет исключительно свою операцию. Например Init() будет инициализировать Direct3D (в дальнейшем, просто D3D), Render() — рендерить сцену, а Sweep() — производить очистку после выполнения программы. Я постарался, как можно больше упростить программу, поэтому урезал некоторые моменты (например, обработку ошибок, которые могут возникнуть при инициализации). В последующих программах мы будем стараться "честно" учитывать все возможные ошибки и обрабатывать их. Итак, рассмотрим подробнее, что же делают наши функции.

Функция WinMain()

Самая главная функция. Именно с нее начинается выполнение любой программы, написанной под Windows. В нашем случае она делает вот что:

Описываем переменные.

HWND hWnd; //Handle окна

MSG msg;

Затем идет настройка параметров класса, регистрация класса в системе и создание окна, представляющего этот класс.

//Настраиваем параметры класса wclass перед его регистрацией в системе

wclass.cbSize=sizeof(wndclassex);

wclass.style=CS_DBLCLKS;

wclass.lpfnWndProc=&MessageProc;

//Функция обрабатывающая сообщения

wclass.cbClsExtra=0;

wclass.cbWndExtra=0;

wclass.hInstance=hInst;

wclass.hIcon=LoadIcon(NULL, IDI_APPLICATION);

wclass.hCursor=LoadCursor(NULL, IDC_ARROW);

wclass.hbrBackground=GetSysColorBrush(COLOR_APPWORKSPACE);

wclass.lpszMenuName=NULL;

wclass.lpszClassName="InitClass";

wclass.hIconSm=NULL;


//Выходим, если не удалось зарегистрировать класс

if (!RegisterClassEx(&wclass)) return 0;

//Теперь создадим окно и занесем его handle в hWnd

hWnd =

 CreateWindow("InitClass", "D3D Init", WS_SYSMENU|WS_OVERLAPPED|WS_MINIMIZEBOX,  100, 100, 420, 300, NULL, NULL, hInst, NULL);

Подробное описание структуры WNDCLASSEX и параметров функции CreateWindow() смотри в статье JM'а "Введение в программирование под Windows". Стоит обратить внимание на то, что мы после всех манипуляций будем иметь в hWnd дескриптор окна, в котором затем сможем отображать нашу сцену.

Теперь обратимся к функции инициализации D3D:

Init(hWnd);

Остается только показать на экране наше окно

ShowWindow(hWnd, nCmdShow);

//Рисуем окошко

UpdateWindow(hWnd);

и организовать цикл обработки сообщений окну

while (GetMessage(&msg, NULL, 0, 0)) //Цикл обработки сообщений

{

 TranslateMessage(&msg);

 DispatchMessage(&msg);

}

return (msg.wParam);

Функция Init()

Теперь, когда у нас есть окно, мы готовы к инициализации объекта Direct3D. Зачем он нужен? Как только будет создан объект Direct3D, мы сможем использовать метод IDirect3D8::CreateDevice() для создания устройства Direct3D (предварительно настроив его параметры), т.е. нашего устройства рендеринга. Параметры устройства задаются непосредственно перед его созданием с помощью структуры D3DPRESENT_PARAMETERS, и передаются в метод IDirect3D8::CreateDevice(). Рассмотрим этот процесс подробнее. Итак, создаем объект Direct3D:

g_pD3D=Direct3DCreate8(D3D_SDK_VERSION);

Единственным параметром функции Direct3DCreate8 является UINT SDKVersion, который должен быть D3D_SDK_VERSION. Это необходимо для того, чтобы при компиляции программы были использованы правильные заголовочные файлы [*.h] (замечание: если после создания объекта были подключены новые адаптеры, необходимо повторно инициализировать объект Direct3D, чтобы использовать их). Если в процессе инициализации произошла ошибка, то Direct3DCreate8 возвращает NULL (т.е. пустой указатель).

Уже пора определиться, что же будет делать наша программа :).

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

Заголовок окна ("window name" стоило перевести как "имя окна", но тогда как-то несолидно звучит :) ) будет содержаться в строке символов str (т.е. str указывает на первый символ строки). Чтобы сформировать str, необходимо узнать ширину (Width) и высоту (Height) текущего видеорежима, а затем воспользоваться стандартной Си'шной функцией sprintf(), которая осуществляет форматированный вывод в строку. Как же узнать ширину и высоту текущего видеорежима? Для этого воспользуемся методом IDirect3D8::GetAdapterDisplayMode, который возвращает текущий режим видеоадаптера в структуру D3DDISPLAYMODE. Затем из структуры "выуживаем" необходимые параметры Width и Height, формируем строку str. Остается только изменить заголовок нашего окна с помощью стандартной WinAPI функции SetWindowText():

D3DDISPLAYMODE dm;

//В переменной dm будет храниться текущий видеорежим

//Заголовок нашего окна. Будет генериться в зависимости от текущего видеорежима

char str[128];

g_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &dm);

Width=dm.Width;

Height=dm.Height;

sprintf(str," (D3D Init) Current adapter mode: [%dx%d]", Width, Height);

SetWindowText(hWnd, str);

Наконец, займемся непосредственно инициализацией D3D. Как было сказано выше, нам понадобится переменная-структура типа D3DPRESENT_PARAMETERS. Опишем эту переменную и выделим для нее память:

//Структура понадобится для создания D3DDevice

D3DPRESENT_PARAMETERS p_p;

ZeroMemory(&p_p, sizeof(p_p));

Меняя поля структуры p_p, мы можем гибко настраивать параметры нашего трехмерного приложения. На этой стадии определяется, будет ли наше приложение оконным или полноэкранным, задается частота обновления экрана (только для полноэкранного режима), необходимое количество бэк-буферов (BackBuffer) и т.д. Бэк-буфер — это область памяти для хранения одного неактивного в данный момент (т.е. визуально скрытого от пользователя) видеоэкрана. В бэк-буфер можно рендерить сцену, в то время, как пользователь видит на экране другую картинку, и практически моментально выводить содержимое бэк-буфера на экран.

Мы создаем оконное приложение (об этом говорит строка p_p.Windowed=TRUE;), поэтому необходимо установить формат бэк-буфера таким же, как и формат текущего видеорежима (как ты помнишь, он у нас хранится в переменной dm.Format). Поле SwapEffect задает способ обмена между франт-буфером (FrontBuffer, т.е. тот, который сейчас активен) и бэк-буфером. Существуют несколько значений этого параметра. Мы будем использовать D3DSWAPEFFECT_DISCARD ("discard" переводится с английского, как "сбрасывать", "отбрасывать"), т.е. после вывода на экран содержимое бэк-буфера заполняется "шумами" ("noise"). Реализуем задумки в программный код:


На Facebook В Твиттере В Instagram В Одноклассниках Мы Вконтакте
Подписывайтесь на наши страницы в социальных сетях.
Будьте в курсе последних книжных новинок, комментируйте, обсуждайте. Мы ждём Вас!

Похожие книги на "DirectX 8. Начинаем работу с DirectX Graphics"

Книги похожие на "DirectX 8. Начинаем работу с DirectX Graphics" читать онлайн или скачать бесплатно полные версии.


Понравилась книга? Оставьте Ваш комментарий, поделитесь впечатлениями или расскажите друзьям

Все книги автора Сергей Ваткин

Сергей Ваткин - все книги автора в одном месте на сайте онлайн библиотеки LibFox.

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Отзывы о "Сергей Ваткин - DirectX 8. Начинаем работу с DirectX Graphics"

Отзывы читателей о книге "DirectX 8. Начинаем работу с DirectX Graphics", комментарии и мнения людей о произведении.

А что Вы думаете о книге? Оставьте Ваш отзыв.