z轴,z缓存

深度排序的第二种方法称为z缓冲方法(z-buffer),它是图形硬件设备使用最多的方法。这种方法依赖于像素,每个像素都有一个z值(z值是像素距离观察者的距离)。当每个像素被写入时,渲染器首先检查是否已经存在一个z值更小的像素,如果不存在,这个像素就被绘制出来;如果存在,就跳过该像素。

许多3D图形加速卡都有一个内置的z缓冲,这也是深度排序选择z缓冲方法的原因。在应用程序中使用z缓冲,最容易的方法就是在创建设备对象以及设置显示方式的时候初始化z缓冲,如下所示:
01D3DPRESENT_PARAMETERS d3dpp;
02ZeroMemory(&d3dpp, sizeof(d3dpp));
03d3dpp.Windowed                = TRUE;
04d3dpp.SwapEffect              = D3DSWAPEFFECT_DISCARD;
05d3dpp.BackBufferFormat        = d3ddm.Format;
06// 这里设置Z缓冲并设置Z缓冲的格式
07d3dpp.EnableAutoDepthStencil  = TRUE;
08d3dpp.AutoDepthStencilFormat  = D3DFMT_D16;
09  
10if(FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,g_hWnd,
11D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &g_pD3DDevice)))
12  return FALSE;
13  
14// Set the rendering states
15g_pD3DDevice->SetRenderState(D3DRS_LIGHTING, FALSE);
16g_pD3DDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE);

      同时在绘制每帧之前应该用IDirect3DDevice9::Clear来清除z缓存。

1// clear device back buffer
2g_d3d_device->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_RGBA(0, 0, 0, 255), 1.0f, 0);

      其实,这就是因为z-test的原因。在渲染多边形网格对象到场景中的时候,离观察者越远的对象应该越模糊,同时离观察者越近的物体应该越清楚,这就是深度排序(depth sorting)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值