Библиотека knigago >> Компьютеры: Операционные системы >> Windows >> DirectX 8. Начинаем работу с DirectX Graphics


СЛУЧАЙНЫЙ КОММЕНТАРИЙ

# 1883, книга: Золотое дно. Книга 1
автор: Роман Харисович Солнцев

Прочитал "Золотое дно" Романа Солнцева, которое выиграло престижный Русский Букер. Честно говоря, был немного разочарован. Начинается книга интригующе: молодой айтишник Ваня отправляется к бабушке в деревню искать клад. Но дальше сюжет как-то разваливается. Постоянные перескакивания между прошлым и настоящим, куча второстепенных персонажей, которые никак не влияют на историю... Не знаю, может быть, я чего-то не понял, но меня книга не зацепила. Герои скучные, события предсказуемые....

СЛУЧАЙНАЯ КНИГА

Нил Сорский. Елена Владимировна Романенко
- Нил Сорский

Жанр: Религиоведение

Год издания: 2021

Серия: Жизнь замечательных людей

Сергей Ваткин , Kelly Dempski , Johnny Watson , Константин Поздняков - DirectX 8. Начинаем работу с DirectX Graphics

DirectX 8. Начинаем работу с DirectX Graphics
Книга - DirectX 8. Начинаем работу с DirectX Graphics.  Сергей Ваткин , Kelly Dempski , Johnny Watson , Константин Поздняков  - прочитать полностью в библиотеке КнигаГо
Название:
DirectX 8. Начинаем работу с DirectX Graphics
Сергей Ваткин , Kelly Dempski , Johnny Watson , Константин Поздняков

Жанр:

Современные российские издания, Литература ХXI века (эпоха Глобализации экономики), Windows, Программирование графики

Изадано в серии:

неизвестно

Издательство:

неизвестно

Год издания:

-

ISBN:

неизвестно

Отзывы:

Комментировать

Рейтинг:

Поделись книгой с друзьями!

Помощь сайту: донат на оплату сервера

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

Аннотация к этой книге отсутствует.

Читаем онлайн "DirectX 8. Начинаем работу с DirectX Graphics". [Страница - 7]

переводе означает: "Помни, наиболее быстрые полигоны — это те, которые ты не рисуешь"). Создание VB производится функцией CreateVertexBuffer:

HRESULT CreateVertexBuffer(UINT Length, DWORD Usage, DWORD FVF, D3DPOOL Pool, IDirect3DVertexBuffer8** ppVertexBuffer);

Length — длина VB в байтах

Usage — дополнительная информация о VB, которую D3D использует для создания оптимального VB

FVF — формат вершин, которые будут храниться в VB

Pool — в какой памяти создавать VB (можно создать его как в видеопамяти, так и в RAM)

ppVertexBuffer — адрес переменной, которая будет содержать указатель на созданный VB

Всего для хранения полигонов пирамиды используется 4*3*sizeof(MYVERTEX) байт (4 полигона, по 3 вершины в каждом).

if (FAILED(g_pD3DDevice->CreateVertexBuffer(4*3*sizeof(MYVERTEX), 0, D3DFVF_MYVERTEX, D3DPOOL_DEFAULT, &g_pVB))) {

 return FALSE;

}

Остается заполнить буфер вершинами. Для операций заполнения в DX (не только в D3D) используется пара команд Lock() и Unlock(). Команда Lock() возвращает адрес памяти, по которому расположен первый байт буфера. При этом вся память, отведенная под буфер как бы "запирается", и становится недоступной для других приложений. Операция "отпирания" памяти производится командой Unlock(). После запирания памяти, скопируем данные с помощью Си'шной функции memcpy().

VOID* pVertices;

if (FAILED(g_pVB->Lock(0, sizeof(Vertices), (BYTE**)&pVertices, 0))) return FALSE;

memcpy(pVertices, Vertices, sizeof(Vertices));

g_pVB->Unlock();

Функция DoMatrices()
Я считаю, что это — самая сложная для понимания функция. Разговор о матрицах выходит за формат данной статьи, т.к. это очень обширная тема. Советую почитать статьи JM'а по этому поводу (скажу по секрету — он фанат матриц ;o)). Но вкратце, я все равно расскажу о матрицах :-)

У нас есть трехмерное пространство сцены, которое содержит вершины всех объектов, есть камера - глаз, с помощью которого мы видим это пространство, а также плоскость экрана монитора, на которую осуществляется проектирование. Все это ("мир", камера, операция проектирования) может быть выражено тремя матрицами: World Matrix (мировая матрица), View Matrix (видовая матрица) и Projection Matrix (проекционная матрица).

Вычислять эти матрицы "вручную" довольно сложно, поэтому воспользуемся функциями D3DX. Для матриц создан специальный тип данных D3DMATRIX. В библиотеке D3DX он расширен до типа данных D3DXMATRIX, в который добавлены арифметические операции с матрицами, и некоторые другие удобные свойства.

• Функция D3DXMatrixIdentity() строит единичную матрицу.

• Функция D3DXMatrixRotationZ() строит матрицу вращения относительно оси Z на заданный угол.

• Функция D3DXMatrixLookAtLH() строит видовую матрицу. Параметры этой функции задают точку, в которую будет смотреть камера. Постфикс -(LH) говорит о том, что матрица будет действительна для левосторонней системы координат (аналогично -(RH) для правосторонней)

• Функция D3DXMatrixPerspectiveFovLH() строит проекционную матрицу.

Для того, чтобы "заставить" устройство рендеринга использовать только что созданные нами матрицы, существует функция SetTransform():

HRESULT SetTransform(D3DTRANSFORMSTATETYPE State, CONST D3DMATRIX* pMatrix);

State — тип матрицы, которую нужно изменить (мировая, видовая, проекционная и т.д.)

pMatrix — указатель на "матрицу-заменитель" :)

Вот что нам требуется от каждой из матриц:

a. Мировая

Сделаем так, чтобы пирамида с течением времени равномерно вращалась вокруг оси Z:

D3DXMATRIX matWorld;

D3DXMatrixIdentity(&matWorld);

D3DXMatrixRotationZ(&matWorld, GetTickCount()/1024.0f);

g_pD3DDevice->SetTransform(D3DTS_WORLD, &matWorld);

b. Видовая

Камера должна смотреть на пирамиду сбоку, причем не должно быть видно нижнего основания пирамиды (помнишь, мы выбросили два полигона основания?):

D3DXMATRIX matView;

D3DXMatrixLookAtLH(&matView, &D3DXVECTOR3(5.0f, 5.0f, 6.5f), &D3DXVECTOR3(0.0f, 0.0f, 1.0f), &D3DXVECTOR3(0.0f, 0.0f, 1.0f));

g_pD3DDevice->SetTransform(D3DTS_VIEW, &matView);

c. Проекционная

D3DXMATRIX matProj;

D3DXMatrixPerspectiveFovLH(&matProj, D3DX_PI/3, 1.0f, 1.0f, 100.0f);

g_pD3DDevice->SetTransform(D3DTS_PROJECTION, &matProj);

Здесь D3DX_PI/3 - это поле зрения (field of view) камеры. Попробуй поэкспериментировать с этим параметром.

Функция RenderScene()
Собственно, здесь и происходит рендеринг сцены. Как всегда, он начинается с очистки окна и Z-Buffer'а:

g_pD3DDevice->Clear(0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(100, 100, 100), 1.0f, 0);

Затем, подготавливаем D3D к началу сцены.

g_pD3DDevice->BeginScene();

Пересчитываем матрицы:

DoMatrices();

Теперь настроим текстуру. И вообще, здесь подходящее место для того, чтобы вкратце рассказать о том, что такое текстура и текстурные координаты! Итак… Текстура — это графическая картинка, которая используется для натягивания на трехмерный (и не только) объект, что придает ему --">

Оставить комментарий:


Ваш e-mail является приватным и не будет опубликован в комментарии.