+ + =
将第三张图像作为alpha贴图,如何在DX9兼容的像素着色器中实现,以便在前两幅图像之间“混合”,创建类似于第四张图像的效果?
此外,如何将这个新创建的纹理返回到CPU,在那里它可以放回到原始纹理数组中?
答案 0 :(得分:2)
粗略的方法是将纹理的颜色与alphamap混合,然后从pixelhader返回它:
float alpha = tex2D(AlphaSampler,TexCoord).r;
float3 texture1 = tex2D(Texture1Sampler,TexCoord).rgb;
float3 texture2 = tex2D(Texture2Sampler,TexCoord).rgb;
float3 color = lerp(texture1,texture2,alpha);
return float4(color.rgb,1);
因此,您需要一个纹理作为rendertarget(doc),其大小与inputtextures一样,全屏四边形作为渲染几何体,xyzrhw quad将是最简单的。您可以使用此纹理进一步渲染。如果您想要阅读纹素或其他内容,您必须锁定结果,您可以使用StretchRect
(doc)或UpdateSurface
(doc)复制数据进入正常的纹理。
如果性能不重要(例如你预处理纹理),你可以更容易在cpu上计算它(但它更慢)。锁定4个纹理,迭代像素并直接合并它们。