本课主要是矩阵变换和DepthBuffer的创建;
笔记:关于depthBuffer
问题:1.depthBuffer的作用?
2.怎么创建?
作用:我想到的:1.depthTest,保证遮挡,同一个pixel中z值小的渲染; 2.三维世界,需要z值来表示近大远小 3.dx中值在1到0之间
MSDN的解释:1.depthBuffer存储每个pixel的z值,也可以存储stencil值,常用32bit,24bit用于depth数据 8bit用于stencil数据
2.当一个pixel渲染后,里面保存color值和depth值,如果一个pixel进行二次render(比如物体遮挡overlap),需要进行depthTest,最终决定绘制结果
怎么创建:The following code in the sample creates a depth buffer (a DepthStencil texture). It also creates a DepthStencilView of the depth buffer so that Direct3D 11 knows to use it as a Depth Stencil texture.
首先先用device创建一块buffer,先申请一块ID3D11Texture2D,在填充相应的数据信息,绑定到texture2D上:
hr = g_pd3dDevice->CreateTexture2D( &descDepth, NULL,&g_pDepthStencil );//申请g_pDepthStencil一块buffer,绑定DESC相应信息
但现在dx不知道这块buffer干嘛用的?
所以device创建DepthStencilView并绑定g_pDepthStencil 告诉dx这用来作为depth和stencil存储
下面context设置后台buffer里的 color和depth:
g_pImmediateContext->OMSetRenderTargets( 1, &g_pRenderTargetView, g_pDepthStencilView );
记住每帧要先进行clear,以保证上帧的数据不影响现在的render