Шаг 14 - Используем буфер глубины (Z-буфер)

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

Перейдем в конструктор главного окна CMainWnd::CMainWnd() найдем там присвоение параметров отображения (d3dpp) и добавим еще два значения:

d3dpp.EnableAutoDepthStencil = true;
d3dpp.AutoDepthStencilFormat = D3DFMT_D32;

Для более подробной информации смотрите "Шаг 11 - Описание структуры D3DPRESENT_PARAMETERS" и какие можно назначать форматы глубины "Шаг 19 - Описание перечисляемого типа D3DFORMAT".

Также добавим в функцию Transform3D перед закрывающей скобкой:

p_d3d_Device->SetRenderState (D3DRS_ZENABLE, D3DZB_TRUE);

Для более подробной информации смотрите "Шаг 54 - Описание перечисляемого типа D3DRENDERSTATETYPE".

И не забудем в функции OnPaint() изменить параметры Clear:

p_d3d_Device->Clear (0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,
	D3DCOLOR_XRGB (128, 128, 0), 1.0f, 0);

Для более подробной информации смотрите "Шаг 8 - IDirect3DDevice8::Clear". Число 1.0 говорит о том, что мы будем очищать весь буфер глубины.

Собственно и все, мы получили то что хотели, результат на лицо :) Круто, но мало, остальное все в следующих шагах :)


Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Хавов Евгений Валерьевич - 29.08.2002