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


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

# 1396, книга: Остров
автор: Михаил Рейдерман

"Остров" Михаила Рейдермана - это настоящий алмаз среди приключенческой литературы. Как и автор, я родом из СССР, и эта книга насквозь пропитана духом той эпохи, духом свободы и самиздата. Главный герой, Саня, отправляется в путешествие по стране, чтобы развезти запрещенную литературу. По пути он сталкивается с множеством опасностей и приключений. Но именно эти испытания закаляют его и превращают в истинного воина. Рейдерман мастерски передал атмосферу дорожных приключений,...

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

Смерть берет тайм-аут. Эйлет Уолдман
- Смерть берет тайм-аут

Жанр: Детектив

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

Серия: Опасно для жизни

Сергей Ваткин , 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". [Страница - 5]

D3DFMT_D16;

Первая говорит о том, что при рендеринге будет использоваться Depth Buffer ("буфер глубины"), причем D3D будет управлять им автоматически. Когда разберешься с программой, попробуй поэкспериментировать: запусти программу в исходном виде, а затем проверь, что получится, если эти две строки удалить. Depth Buffer еще называют Z-Buffer'ом.

Рассмотрим принцип его использования на примере. Представь себе человека на фоне кирпичной стены… Теперь мысленно переведи эту "сцену" в Direct3D (для этого, необходимо задать человека и стену в виде набора текстурированных полигонов) и заставь его эту сцену отрендерить. То, что мы увидим на экране — всего лишь двумерная проекция нашей сцены. Т.о., D3D спроектировал на плоскость экрана стену и человека. Причем, мы увидели человека на фоне стены, а не стену на фоне человека, т.к. он стоит ближе к нам Ж-) Как же D3D "узнает" что именно проектировать на экран раньше, чтобы не было бессмысленных перекрытий? Для этого используется Z-Buffer! Z-Buffer представляет собой массив Z-координат каждой точки этой поверхности (будем называть ее числовой составляющей (ЧС) Z-Buffer'а). Ось Z направлена в плоскость экрана (от тебя). Каждой точке сопоставлен единственный элемент ЧС. Перед началом рендеринга Z-буфер может быть заполнен в каждой точке значением равным максимально возможным расстоянием от наблюдателя до объекта сцены. После этого, для каждого полигона в сцене выполняются следующие действия:

a. определяется область, которую будет занимать полигон при проектировании на плоскость экрана

b. для каждого пикселя этой области сравнивается Z-координата точки-прообраза, принадлежащей исходному полигону, с соответствующим значением ЧС

c. если соответствующее значение ЧС оказывается меньше, значит, рассматриваемая точка полигона не отображается, т.к. перекрыта другими объектами. Иначе, в ЧС для рассматриваемой точки записывается ее Z-координата, а в цветовую область заносится пиксель соответствующего цета.

Вот и весь принцип.

Далее в программе создается устройство рендеринга:

if (FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,  D3DCREATE_SOFTWARE_VERTEXPROCESSING, &p_p, &g_pD3DDevice))) {

 if (FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_REF, hWnd,  D3DCREATE_SOFTWARE_VERTEXPROCESSING, &p_p, &g_pD3DDevice))) return FALSE;

}

Здесь программа пытается выбрать наиболее оптимальный режим для работы. Сначала она пробует создать аппаратное устройство рендеринга, т.е. когда все обсчеты графики ведет исключительно видеокарта (D3DDEVTYPE_HAL), но если это не удается (причин может быть много, но чаще всего она одна — старая видеокарта) D3D работает в режиме программной эмуляции, что прискорбно отражается на скорости и качестве графики. Едем дальше: Задается режим "выбраковки" тыльных сторон полигонов (подробней мы рассмотрим это дальше — в функции InitScene()):

g_pD3DDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_CW);

Включаем равномерное освещение всей сцены:

g_pD3DDevice->SetRenderState(D3DRS_LIGHTING, FALSE);

Включаем поддержку Z-Buffer'а

g_pD3DDevice->SetRenderState(D3DRS_ZENABLE, TRUE);

Может возникнуть вопрос, для чего может понадобиться отключение Z-Buffer'а. Одно из применений — вывод на экран текста, который должен перекрывать все остальное.

Хотелось бы также подробней рассказать про функцию SetRenderState() интерфейса IDirect3DDevice8, которую мы уже встречали ранее. Эта функция вообще незаменима, т.к. с ее помощью можно задать огромное количество различных настроек, влияющих на процесс рендеринга. Вот описание этой функции:

HRESULT SetRenderState(D3DRENDERSTATETYPE State, DWORD Value);

State — тип изменяемого параметра

Value — новое его значение

Функция InitTexture()
Эта функции выполняет только одно действие — загружает текстуру из файла в память для дальнейшего использования. Загрузка текстуры вручную заняла бы у нас довольно обширный кусок программного кода - этому будет посвящена отдельная статья. Поэтому, используем функцию D3DXCreateTextureFromFile(), которую программисты Microsoft написали за нас :) Префикс "D3DX-" этой функции, говорит о том, что она взята из библиотеки D3DX. Эта вспомогательная библиотека включает в себя очень много полезных функций, как для математических операций (в основном, работы с матрицами), так и для загрузки изображений, формирования стандартных геометрических объектов (сфера, куб и т.п.) и многого другого. Тем не менее, эти функции написаны для общих задач. Когда ты будешь писать конкретную программу, требующую быстродействия, советую не использовать D3DX, а писать аналоги его функций самому.

Вот описание функции --">

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


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