是否可以在使用D3DXCreateTextureFromFileInMemoryEx创建的一个位置中逐步对两个纹理进行alpha混合?

时间:2009-11-09 17:43:43

标签: c++ directx

我有两个纹理,都是.jpg,代表天空(白天一个,晚上一个)。我的问题是,我可以将一个纹理淡入另一个吗?它们是使用D3DXCreateTextureFromFileInMemoryEx创建的。我该如何进行这种转变?我不想创建两个对象,只是逐渐改变纹理。

要清楚,我希望,随着时间的推移,慢慢地从一个纹理混合到另一个纹理(和背面)。但是,我不希望任何时候都能继续褪色。如果您有任何建议,请提前致谢。

2 个答案:

答案 0 :(得分:2)

你有很多选择 -

您可以将两种纹理与纹理混合一起使用,以便从一种纹理过渡到另一种纹理。

但是,如果您长时间执行此操作,则可能需要预先计算第三个纹理(混合状态)并将其用作单个纹理。偶尔,重新计算“新”状态。这可能会简化您的渲染,因为您将使用单个纹理(随着时间的推移而变化缓慢),而不必为此效果始终进行多纹理。 (如果你没有做任何其他事情,除了你正在纹理化的物体,如果纹理不是很大,那么简单的2纹理多纹理并不是什么大问题。)

答案 1 :(得分:1)

使用像素着色器。

float t : register(c0);

float4 t1 = tex2D(g_sampler1, texcoord);
float4 t2 = tex2D(g_sampler2, texcoord);

float4 result = lerp(t1, t2, t);

您传入t作为线性插值量。 t = 0.0为您提供第一个纹理,t = 1.0为您提供第二个纹理,并在其间线性插值。

您的文件格式没有任何区别,它可以避免计算第三个纹理。