Directx GPU纹理飞溅 作为一个简单的例子,我试着做以下几点:

Directx GPU纹理飞溅 作为一个简单的例子,我试着做以下几点:,directx,shader,textures,hlsl,alphablending,Directx,Shader,Textures,Hlsl,Alphablending,+ + = 将第三幅图像作为alpha贴图,如何在DX9兼容的像素着色器中实现这一点,以便在前两幅图像之间“混合”,从而创建类似于第四幅图像的效果? 此外,如何将新创建的纹理返回给CPU,并将其放回原始纹理数组中?粗略的方法是将纹理的颜色与alphamap混合,然后从pixelshader返回: float alpha = tex2D(AlphaSampler,TexCoord).r; float3 texture1 = tex2D(Texture1Sampler,TexCoord).rgb;

+ + =


将第三幅图像作为alpha贴图,如何在DX9兼容的像素着色器中实现这一点,以便在前两幅图像之间“混合”,从而创建类似于第四幅图像的效果?

此外,如何将新创建的纹理返回给CPU,并将其放回原始纹理数组中?

粗略的方法是将纹理的颜色与alphamap混合,然后从pixelshader返回:

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(),具有InputTexture的大小,并需要一个全屏四元体作为渲染的几何体,xyzrhw四元体将是最简单的。此纹理可以进一步用于渲染。如果要读取texel或其他内容,必须锁定结果,可以使用
StretchRect
()或
UpdateSurface
()将数据复制到普通纹理中


如果性能不重要(例如,预处理纹理),可以在cpu上更轻松地计算(但速度较慢)。锁定4个纹理,在像素上迭代并直接合并它们。

谢谢!在你发帖之前,我不知道lerp,现在我不仅有了答案,而且在我的数学宝库中有了一个新的工具。