Как сделать спрайт белым в XNA?

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

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


person Iain    schedule 17.09.2008    source источник


Ответы (5)


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

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);
}

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

person Joel Martinez    schedule 17.09.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

Развлекайся

person Adi    schedule 17.09.2008

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

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

person Joel Martinez    schedule 17.09.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.Immediate — это трюк, который позволяет вам заменить шейдер SpriteBatch по умолчанию на свой собственный. Однако его использование сделает отрисовку спрайтов немного медленнее, поскольку спрайты не группируются в одном вызове отрисовки, но я не думаю, что вы заметите разницу.

person finalman    schedule 23.09.2008

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

person Neoaikon    schedule 17.09.2008