Так почему же предыдущий шаг отображал треугольник неправильно? Потому что мы не использовали буфер глубины. Во-первых, у нас не было как такого вообще буфера глубины, во-вторых, отображение на экран шло без буфера глубины, т.е. компьютер не понимал как отображать и отображал как мог, и в третьих, буфер глубины тоже нужно очищать. Вот этим мы и займемся на данном шаге.
Перейдем в конструктор главного окна 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 говорит о том, что мы будем очищать весь буфер глубины.
Собственно и все, мы получили то что хотели, результат на лицо :) Круто, но мало, остальное все в следующих шагах :)