directx11怎么样只clear一部分depth/stencil view 呢

对于每一部分,生成一个矩形,画出来。vertex shader是个直通输出坐标的。pixel shader输出depth,渲染状态里输出stencil。D3D下没别的办法。OpenGL里的clear是接受scissor状态的,D3D不接受。所以在ANGLE里,我们的做法就是那样,画矩形。具体代码和解释在https://chromium.googlesource.com/angle/angle/+/master/src/libANGLE/renderer/d3d/d3d11/Clear11.cpp, Clear11::clearFramebuffer。
■网友
改op然后直接画上去就行了,要有想象力
■网友
1. 做一张纹理图,把要清空部分像素点的Alpha设为1,其他部分设为02. 开AlphaTest,只取Alpha为1的像素3. 开AlhpaBlend,BlendOp设为Add,SrcBlend因子设为0,DestBlend因子设为14. StencilTest和DepthTest都设为Always,StencilRef的值设成你想清空以后的值5. 投影矩阵设成正交投影6. 画一个刚好覆盖整个屏幕的矩形(矩形在投影空间的Z坐标除以(ZFar - ZNear)会转化为深度),把第一步做的纹理图贴上去
■网友
其实你每次渲染的时候都是可以改写stencil的,例如让测试永远通过,并且进行替换… 问题无非就是你无法确定这个渲染图形会覆盖在哪些区域… 方法就是不要让顶点着色器做顶点变换


    推荐阅读