Direct3D_Init()部分代码
1、创建深度缓冲区
//--------------------------------------------------------------------------------------
// 【Direct3D初始化四步曲之三,填内容】:填充D3DPRESENT_PARAMETERS结构体
//--------------------------------------------------------------------------------------
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3dpp, sizeof(d3dpp));
d3dpp.BackBufferWidth = WINDOW_WIDTH;
d3dpp.BackBufferHeight = WINDOW_HEIGHT;
d3dpp.BackBufferFormat = D3DFMT_A8R8G8B8;
d3dpp.BackBufferCount = 2;
d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE;
d3dpp.MultiSampleQuality = 0;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.hDeviceWindow = hwnd;
d3dpp.Windowed = true;
d3dpp.EnableAutoDepthStencil = true; //自动管理深度缓存
d3dpp.AutoDepthStencilFormat = D3DFMT_D24S8; //深度缓存像素格式
d3dpp.Flags = 0;
d3dpp.FullScreen_RefreshRateInHz = 0;
d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
2、开启深度测试
Direct3D_Update()部分代码,在WinMain()中的消息循环中调用
// 开启或者关闭深度测试
if (g_pDInput->IsKeyDown(DIK_1)) //按下1键,开启深度测试
g_pd3dDevice->SetRenderState(D3DRS_ZENABLE, true);
if (g_pDInput->IsKeyDown(DIK_2)) //按下2键,关闭深度测试
g_pd3dDevice->SetRenderState(D3DRS_ZENABLE, false);
3、设置深度测试函数
4、更新深度缓冲区
Objects_Init()部分代码,在Windows窗口创建后调用
g_pd3dDevice->SetRenderState(D3DRS_ZFUNC, D3DCMP_LESS); //将深度测试函数设为D3DCMP_LESS
g_pd3dDevice->SetRenderState(D3DRS_ZWRITEENABLE, true); //深度测试成功后,更新深度缓存