Как я могу подкрасить спрайт в белый в XNA? - PullRequest
6 голосов
/ 17 сентября 2008

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

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

Ответы [ 5 ]

3 голосов
/ 17 сентября 2008

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

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 голос
/ 23 сентября 2008

Джоэл Мартинес действительно прав, и вы используете его таким образом с 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. Здесь есть хитрость, она позволяет вам заменить шейдер SpriteBatch по умолчанию на свой собственный. Его использование сделает рисование спрайтов немного медленнее, поскольку спрайты не объединяются в один вызов отрисовки, но я не думаю, что вы заметите разницу.

1 голос
/ 17 сентября 2008

Если вы хотите использовать пользовательские шейдеры со SpriteBatch, посмотрите этот пример:

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

1 голос
/ 17 сентября 2008

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

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

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

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

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

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

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

Веселись

0 голосов
/ 17 сентября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...