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

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

Тут можно читать онлайн Сергей Ваткин - DirectX 8. Начинаем работу с DirectX Graphics - бесплатно полную версию книги (целиком). Жанр: comp-programming. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте LibKing.Ru (ЛибКинг) или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
libking

  • Название:
    DirectX 8. Начинаем работу с DirectX Graphics
  • Автор:
  • Жанр:
  • Издательство:
    неизвестно
  • Год:
    неизвестен
  • ISBN:
    нет данных
  • Рейтинг:
    4/5. Голосов: 81
  • Ваша оценка:

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

DirectX 8. Начинаем работу с DirectX Graphics - описание и краткое содержание, автор Сергей Ваткин, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

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():





Сергей Ваткин читать все книги автора по порядку

Сергей Ваткин - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




DirectX 8. Начинаем работу с DirectX Graphics отзывы


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


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


Прокомментировать
img img img img img