深度纹理的使用
来源:互联网 发布:中科软件 董事长 编辑:程序博客网 时间:2024/05/30 05:14
在D3D中创建一个深度纹理,并传入片段程序。主要步骤如下:
1、创建一个深度纹理
//创建深度纹理//1 获取后台缓存信息IDirect3DSurface9 * pSurface = nullptr;hr = pDevice->GetRenderTarget(0, &pSurface);//ref count +1if (FAILED(hr)){MessageBox(NULL, _T("获取RenderTarget failed"), NULL, MB_OK);return false;}D3DSURFACE_DESC desc;pSurface->GetDesc(&desc);pSurface->Release();//ref count -1int texWidth, texHeight;texWidth = desc.Width;texHeight = desc.Height;//2 根据后台缓存大小创建深度纹理hr = pDevice->CreateTexture(texWidth, texHeight, 1, D3DUSAGE_DEPTHSTENCIL, D3DFMT_D16, D3DPOOL_DEFAULT, &g_pShadowTexture, nullptr);
2、设置深度纹理到后台
IDirect3DSurface9 * pOldDepthSurface = nullptr;IDirect3DSurface9 * pNewDepthSurface = nullptr;hr = pDev->GetDepthStencilSurface(&pOldDepthSurface);assert(SUCCEEDED(hr));hr = g_pShadowTexture->GetSurfaceLevel(0, &pNewDepthSurface);//顶层纹理是0,先前这里犯了个错误,设置了1,导致失败assert(SUCCEEDED(hr));hr = pDev->SetDepthStencilSurface(pNewDepthSurface);//设置新的深度缓存assert(SUCCEEDED(hr));pDev->Clear(0, NULL, D3DCLEAR_ZBUFFER, 0, 1.f, 0);//***//重置深度缓存的值,以免影响正确的结果
3、设置好深度缓存后,下面就可以进行场景的渲染,将深度值写入上面设置的深度缓存中
Render Objects
在渲染场景前,最好将关闭对颜色缓存的写入操作,后面再将其开启
pDev->SetRenderState(D3DRS_COLORWRITEENABLE, 0);
4、设置回原来旧的深度缓存,并开启颜色写操作
pDev->SetDepthStencilSurface(pOldDepthSurface);//设置旧的深度模版缓存pOldDepthSurface->Release();pNewDepthSurface->Release();pDev->SetRenderState(D3DRS_COLORWRITEENABLE, //开启颜色写D3DCOLORWRITEENABLE_ALPHA | D3DCOLORWRITEENABLE_BLUE | D3DCOLORWRITEENABLE_GREEN | D3DCOLORWRITEENABLE_RED);5、后面就可以进行我们正常的操作了
0 0
- 深度纹理的使用
- 怎样使用深度纹理
- 怎样使用深度纹理
- 纹理矩阵堆栈/深度纹理和阴影的绘制
- Unity 获得Transparent材质的深度纹理
- CUDA 纹理的使用
- opengl纹理的使用
- CUDA 纹理的使用
- 纹理对象的使用
- 【寒江雪】纹理的使用
- OpenGL 纹理的使用入门
- CUDA使用CUDAArray的纹理
- <D3D> 多重纹理的使用
- CUDA纹理内存的使用
- TextureAtlas纹理地图集的使用
- 使用纹理贴图的步骤
- android openGl纹理的使用
- 深度缓纹理
- View的事件分发机制
- 黑马程序员——ObjectiveC基础——Self与Super
- java中介者模式
- Ubuntu 14.04下安装有道词典
- 使用Android NDK内置编译器为Android编译Linux应用程序
- 深度纹理的使用
- C#识别身份证号码(经典版)
- 多态
- 工作思考-2015年初
- java解释器模式
- 关于CUDA的一些学习资料
- java上传图片到文件夹
- Linux系统编译boost源码,然后和Qt Creator配套使用
- 《剑指Offer》和为定值的两个数