0

举个简单的例子,我正在尝试执行以下操作:


污垢+ 草+ Α=混合


使用第三张图像作为 Alpha 贴图,如何在兼容 DX9 的像素着色器中实现前两张图像之间的“混合”,从而创建类似于第四张图像的效果?
此外,如何将这个新创建的纹理返回给 CPU,然后将其放回原始纹理数组中?

4

1 回答 1

2

粗略的方法是将纹理的颜色与 alphamap 混合并从像素着色器返回:

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 四边形将是最简单的。您可以进一步使用此纹理进行渲染。如果您想读取纹素或其他内容,您必须锁定结果,您可以使用StretchRect( doc ) 或UpdateSurface( doc ) 将数据复制到普通纹理中。

如果性能不重要(例如你预处理纹理),你可以更容易地在 cpu 上计算它(但它更慢)。锁定 4 个纹理,遍历像素并直接合并它们。

于 2013-04-24T22:10:46.130 回答