z轴,z缓存

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

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

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

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

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

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

相关文章
|
前端开发 JavaScript 容器
JavaScrpit如何实现弹出遮罩层后将页面固定到当前位置且无法继续滚动
JavaScrpit如何实现弹出遮罩层后将页面固定到当前位置且无法继续滚动
165 0
|
存储 Python
【从零学习python 】28. Python中的局部变量和全局变量
【从零学习python 】28. Python中的局部变量和全局变量
218 0
|
Python
PyCharm常用快捷键
PyCharm常用快捷键
251 0
PyCharm常用快捷键
|
大数据 Linux 5G
飞天计划学生计划使用体验
随着计算机和网络通信技术的发展,云计算已然在很多的领域起到了自己的作用,且具有即连即用,7*24小时待机的优点。
飞天计划学生计划使用体验
|
网络协议 Java 数据处理
京东七鲜一面总结
京东七鲜一面总结
258 0
|
运维 云栖大会 Python
云栖大会SaaS加速器专场 | 福州锐掌网络:携手阿里云构建区域软件生态
导读:本文中,福州锐掌网络的总经理鄢翔将分享和阿里云携手构建的区域软件生态,通过解决传统ISV的三个痛点,和阿里云一起实现区域联动品牌加成。
2024 0
云栖大会SaaS加速器专场 | 福州锐掌网络:携手阿里云构建区域软件生态
|
Java 应用服务中间件 开发框架
tomcat各版本和jsp、jstl、servlet的依赖关系(转)
Servlet / JSP / Tomcat  Version    Servlet/ JSP    Tomcat  2.5/2.1 6.0.18 2.4/2.0 5.
1194 0
|
CDN
WinApi学习笔记-获取电脑中磁盘信息
#include #include #include #define BUFSIZE 1024 void main(void) { CHAR SzLogicalDriveStrings[BUFSIZE]; PCHAR SzDrive; //把这个数组置空 ...
874 0