специальная смесь, необходимая в xna 4.0 - PullRequest
4 голосов
/ 16 октября 2011

у меня есть 2 динамические текстуры, и я хочу добавить второй цвет текстуры к первому цвету текстуры. Но там, где первый цвет текстуры альфа не равен 0, что-то вроде перевернутой прозрачности, я добавляю ссылку на две картинки, чтобы показать, что я имею в виду:

http://img.7setare.com/images/k5znp5efpn1szfvwka.png TO http://img.7setare.com/images/vs4p0qx81zxxrfh1v8d5.png

только часть столкновений должна добавить два пикселя цвета текстуры

ty для вашей помощи

Ответы [ 2 ]

1 голос
/ 17 октября 2011

только что это сделал, прекрасно работает

sampler circleSampler : register(s1);
sampler playerSampler : register(s0);

float4 main(float4 color : COLOR0 ,float2 texCoord : TEXCOORD0):COLOR0
{
float4 output = float4(1,1,1,1);
float4 CircColor = tex2D(circleSampler,texCoord);
float4 playerColor = tex2D(playerSampler,texCoord);
if (CircColor.a ==0)
{
output = playerColor;
}
else
{
output = CircColor* playerColor;
}
output.a = playerColor.a;
return output;
}

technique Technique1
{
    pass Pass1
    {

        PixelShader = compile ps_2_0 main();
    }
}

в любом случае ты время

1 голос
/ 17 октября 2011

Может быть, вам будет достаточно BlendState.Additive.

или, может быть, это может быть достигнуто с помощью пользовательского BlendState .. но у меня нет опыта с этим ...

или вы можете сделать шейдер, вы должны заметить, что у вас есть четыре квадрата:

  1. Четырехугольник с тряпичной куклой. (КРФ)
  2. Четырехугольник с кружком. (Qc)

вы рисуете Qc над Qrd ...

так что вам нужно передать координаты текстуры, которые вы получаете в пиксельном шейдере, который принадлежит Qc, к текстурным кординатам в пространстве Qrd ...

тогда вы выбираете цвет из текстуры Qrd, и если альфа близка к нулю, вы обрезаете пиксель ... иначе вы вернете образец из текстуры Qrc

...