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 - читать книгу онлайн бесплатно, автор Сергей Ваткин
Тёмная тема

Шрифт:

Сбросить

Интервал:

Закладка:

Сделать

g_pD3DDevice->SetTextureStageState(0, D3DTSS_MAGFILTER, CurrentFilter);

g_pD3DDevice->SetTextureStageState(0, D3DTSS_MINFILTER, CurrentFilter);

g_pD3DDevice->SetTextureStageState(0, D3DTSS_MIPFILTER, CurrentFilter);

Перед рендерингом из VB, необходимо задать сам буфер и формат вершин, что делается следующими двумя строками:

g_pD3DDevice->SetStreamSource(0, g_pVB, sizeof(MYVERTEX));

g_pD3DDevice->SetVertexShader(D3DFVF_MYVERTEX);

И, наконец! Все готово для рендеринга! Делается это всего одной функцией DrawPrimitive(). Первый параметр говорит о том, в каком виде хранятся в VB вершины. В нашем случае, объект задается последовательностью треугольников (D3DPT_TRIANGLELIST). Второй параметр говорит о том, с какой по номеру вершины из VB начинать отрисовку. Третий параметр — количество примитивов (в нашем случае треугольников), которые требуется отрендерить.

g_pD3DDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 4);

Завершаем сцену:

g_pD3DDevice->EndScene();

Отображаем бэк-буфер на экране:

g_pD3DDevice->Present(NULL, NULL, NULL, NULL);

Функция Deinitialization()

Для освобождения большинства (если не всех) видов ресурсов в D3D используется функция Release():

if (g_pTexture != NULL) g_pTexture->Release();

if (g_pVB != NULL) g_pVB->Release();

if (g_pD3DDevice != NULL) g_pD3DDevice->Release();

if (g_pD3D != NULL) g_pD3D->Release();

Также, перед завершением работы нужно освободить ранее зарегистрированный класс окна:

UnregisterClass("PyramidClass", wclass.hInstance);

Функция MessageProc()

Программа будет обрабатывать только два типа сообщений: WM_KEYDOWN (нажата клавиша) и WM_DESTROY (уничтожено окно приложения).

При поступлении сообщения WM_KEYDOWN получаем виртуальный код нажатой клавиши:

case WM_KEYDOWN:

int VK;

VK = (int)wParam;

Из клавиш, обрабатываем только Esc, F1, F2, F3, F4. При нажатии на Esc программа должна завершиться, как ни парадоксально это звучит :)) Если нажата клавиша F1-F4, должен смениться тип фильтра (переменная CurrentFilter) и заголовок окна:

switch(VK) {

case VK_ESCAPE:

PostQuitMessage(0);

return 0;

//...

case VK_F2:

CurrentFilter = D3DTEXF_POINT;

SetWindowText(hWnd, "D3D Pyramid (Filter=D3DTEXF_POINT)");

break;

//...

}

При поступлении сообщения WM_DESTROY, выполняются действия, аналогичные производящимся при обработке клавиши Esc:

case WM_DESTROY:

PostQuitMessage(0);

return 0;

Приехали! В принципе, вышеизложенного материала достаточно для самостоятельного написания простых 3D-приложений (для написания игры необходимо, как минимум, уметь работать с матрицами). Рекомендую поэкспериментировать с примером к данной статье. Попробуй поиграть настройками D3D, параметрами функций. Дай волю своему воображению! И, конечно же, попытайся написать что-нибудь сам (например, вращающийся треугольник или куб). Только так можно научиться. Накапливай опыт…

Удачи!

Примечания:

1. Помни, что для компиляции программ, использующих D3DX, необходимо подключить библиотечный файл d3dx8.lib (вместе с d3d8.lib)! Еще раз напомню, как это можно сделать:

a. Project->Settings…

b. Вкладка "Link"

c. В строке "Object/library modules" добавь в начало "d3d8.lib d3dx8.lib"

d. Должно получиться примерно следующее: "d3d8.lib d3dx8.lib kernel32.lib user32.lib gdi32.lib…"

2. Программе необходим файл texture.jpg — он должен лежать в той же директории, что и exe'шник.

Полезные статьи:

Автор: voxatu.

Первые шаги под DirectX 8. (Часть 1)

Автор: Сергей Ваткин.

Первым делом вам нужно убедиться, что на вашей машине установлен компилятор C++ и DirectX8 SDK. Если у вас нет DirectX8 SDK, его можно скачать с сайта Microsoft, учтите только, что скачиваемый файл занимает примерно 140 Мб.

Дальше необходимо немного подстроить вашу среду разработки, а именно указать рабочие пути к DirectX, то есть к заголовочным файлам (.h — файлам) и файлам статических библиотек (.lib). Например, В Visual C++ это делается следующим образом. Меню Tools/Options вызывает диалоговое окно Options. В нем выбираем закладку Directories и выбираем из списка Show directories for сперва Include files для пути к заголовочным файлам, затем добавляем путь (папка Include в каталоге, куда установлен DirectX SDK) и выставляем его, нажимая на иконку "стрелочка вверх", в первую позицию. Аналогично и для пути к библиотечным файлам, выбираем из списка Show directories for пункт Library files и добавляем путь к библиотечным файлам (директория LIB в каталоге DirectX SDK).

Теперь попробуем написать простейшую программу, инициализирующую DirectX. Для этого познакомимся с некоторыми интерфейсами Direct3D и их методами.

Для создания объекта d3d используется функция Direct3DCreate8():

pD3D = Direct3DCreate8(D3D_SDK_VERSION);

здесь pD3D — указатель на интерфейс IDirect3D8, D3D_SDK_VERSIONобъявлено в d3d8.h.

Файл d3d8.h содержит объявления функций, работающих с Direct3D. Поэтому его необходимо включить в свой код директивой препроцессора:

#include

Функция Direct3DCreate8() возвращает указатель на созданный объект d3d. Если она вернула значение NULL, то это означает, что ваша программа не может инициализировать DirectX8. В этом случае ваша программа должна закончить своё выполнение.

Компонент, который занимается просчётом объектов на экран в Direct3D, называется Direct3D device. Он также включает в себя и сохраняет установки, касающиеся просчёта, занимается операциями трансформации, освещения и растеризацией. Метод CreateDevice() интерфейса объекта d3d создаёт такой device. Одним из параметров этого метода является объект структурного типа D3DPRESENT_PARAMETERS. Для ознакомления с Direct3D, мы не будем углубляться в значения всех полей этой структуры. Скажем только про те, которые нам сейчас понадобятся. Поле Windowed отвечает за то, будет ли графика отображаться на весь экран или в окне; значение может быть соответственно FALSE или TRUE.

Чтобы не было видно, как перерисовывается графика, все отображаемые объекты выводят сперва в невидимой области видеопамяти, так называемой back buffer (задний буфер). После того, как кадр полностью прорисован, его копируют в видимую область памяти — front buffer или render target. Если приложение отображает графику на весь экран, то в копировании нет необходимости, достаточно просто говорить Direct3D какая часть видеопамяти является видимой, то есть просто переключать (flip) видимость с одного буфера на другой. Ясно, что если мы выводим графику в окно, то мы можем пользоваться только копированием back buffer'а в front buffer. Поле SwapEffect мы выставим в значение d3dswapeffect_discard чтобы наиболее эффективно представить back buffer для отображения.

BackBufferFormat — ещё одно поле структуры D3DPRESENT_PARAMETERS, которое нам необходимо задать, чтобы сказать Direct3D, какого формата будет back buffer. Пусть наше приложение, для простоты, будет выводить графику в окно. Формат back buffer'а должен совпадать с форматом front buffer'а, который в свою очередь в нашем случае совпадает с текущим форматом desktop'а. Его же мы можем получить методом интерфейса объекта d3d GetAdapterDisplayMode(), указав в качестве первого параметра D3DADAPTER_DEFAULT.

Итак, мы можем уже написать функцию инициализации Direct3D для последующего просчёта объектов:

Читать дальше
Тёмная тема

Шрифт:

Сбросить

Интервал:

Закладка:

Сделать


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

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




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


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


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

Напишите свой комментарий
Большинство книг на сайте опубликовано легально на правах партнёрской программы ЛитРес. Если Ваша книга была опубликована с нарушениями авторских прав, пожалуйста, направьте Вашу жалобу на PGEgaHJlZj0ibWFpbHRvOmFidXNlQGxpYmtpbmcucnUiIHJlbD0ibm9mb2xsb3ciPmFidXNlQGxpYmtpbmcucnU8L2E+ или заполните форму обратной связи.
img img img img img