![]() |
![]() |
|
![]() |
||||||||||||||||||
![]() |
![]() |
![]() |
||||||||||||||||
|
![]() |
|
![]() |
|
||||||||||||||
![]() |
![]() |
![]() |
Шаг 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 говорит о том, что мы будем очищать весь буфер глубины. Собственно и все, мы получили то что хотели, результат на лицо :) Круто, но мало, остальное все в следующих шагах :) Загрузить проект | | | Автор Хавов Евгений Валерьевич. |
![]() |
![]() |
![]() |
|