2008-09-17 13 views
6

Я не думаю, что это возможно только с использованием настройки цвета в SpriteBatch, поэтому я пытаюсь разработать простой шейдер, который будет принимать каждый пиксель и сделать его белым, соблюдая альфа-значение пикселя.Как я могу направить спрайт на белый в XNA?

Ответ Джоэл Мартинес дал мне взгляд, но как мне включить это, когда я рисую спрайт с помощью SpriteBatch?

ответ

0

Я не писал свои собственные пиксельные шейдеры, в основном модифицированные образцы из сети, что бы вы сделали, так это увеличить значение компонентов R, G, B в пикселе соответственно, если они находятся под 255, это постепенно изменило бы цвет спрайта на белый. Эй, это рифмуется.

3

Я думаю, что это то, что вы ищете

sampler2D baseMap; 

struct PS_INPUT 
{ 
    float2 Texcoord : TEXCOORD0; 

}; 

float4 ps_main(PS_INPUT Input) : COLOR0 
{ 
    float4 color = tex2D(baseMap, Input.Texcoord); 
    return float4(1.0f, 1.0f, 1.0f, color.w); 
} 

Это очень просто, он просто берет отобранной цвет текстуры, а затем возвращает все белого цвета, используя значение альфа текселя.

1

Я прикрепляю страницу документации от MS, и если вы выполните все шаги, вы должны быстро ее запустить и запустить.

http://msdn.microsoft.com/en-us/library/bb203872(MSDN.9).aspx

Подводя итог - вам нужно создать и эффект файла (в сочетании кода выше, который является действительно правильным для ваших целей), добавьте его в проект, а затем в загрузке исходного файла его и использовать во время рендеринга, как описано в ссылке.

BTW: Я не совсем помню SpriteBatch (так как я решил написать свое, это слишком ограничительное), но, как я помню, вам может потребоваться установить эффект в материале, который вы отправляете в рендер. В любом случае - может быть, вы найдете здесь:

http://creators.xna.com/en-us/utilities/spritebatchshader

и усовершенствованный код, если вы хотите попасть:

http://creators.xna.com/en-us/sample/particle3d

Весело

1

Joel Martinez действительно правильно, и использовать его, как это с SpriteBatch, загрузив эффект в tintWhiteEffect:

spriteBatch.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.Immediate, SaveStateMode.None); 

tintWhiteEffect.Begin(); 
tintWhiteEffect.CurrentTechnique.Passes[0].Begin(); 

    // DRAW SPRITES HERE USING SPRITEBATCH 

tintWhiteEffect.CurrentTechnique.Passes[0].End(); 
tintWhiteEffect.End(); 

spriteBatch.End(); 

SpriteSortMode.Immediate трюк здесь, она позволяет поменять SpriteBatch-х шейдер по умолчанию для вашего собственного. Используя это, вы сделаете рисунок спрайта немного медленнее, поскольку спрайты не выгружаются в один призыв к рисованию, но я не думаю, что вы заметите разницу.

 Смежные вопросы

  • Нет связанных вопросов^_^