2012-06-30 2 views
2


В настоящее время я изучаю язык «HLSL» для файлов эффектов для своей игры XNA. Однако; Я столкнулся с проблемой применения эффектов к моему SpriteBatch.

Мой файл эффекта выглядит так, и делает визуализированную текстуру белой. :]2D Passes.apply() XNA 4.0

float4 PSFunction(float2 coord : TEXCOORD0) : COLOR0 
{ 
    return float4(0, 0, 0, 1); // Return a white pixel 
} 

technique Sample 
{ 
    pass pass0 
    { 
     PixelShader = compile ps_2_0 PSFunction(); 
    } 
} 

Он работает, как надо, когда я начинаю свой SpriteBatch со следующими аргументами:

SpriteBatch.Begin(0, null, null, null, null, SampleEffect); 

Однако; метод SpriteBatch.Begin не принимает несколько эффектов. Поэтому я попытался сделать

SampleEffect.CurrentTechnique.Passes[0].Apply(); 

перед вызовом

SpriteBatch.Begin(); 

Но ничего не случилось, поэтому я попробовал несколько методов diffrend. Такие как

SampleEffect.CurrentTechnique.Passes["pass0"].Apply(); 

Но это все еще не сработало. Итак, я проверил, что эффект был привязан к правильной GraphicsDevice, используя функцию object.ReferenceEquals, но он был равен правильной графике. Что я делаю неправильно? Как я могу приложить несколько эффектов к моему SpriteBatch?

Спасибо заранее, Rasmus:]

ответ

3

Вы не можете рисовать с многократным эффектом проходит одновременно. Вместо этого вам нужно сделать одно и то же несколько раз, объединив результаты вместе.

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

Если вы хотите объединить несколько эффектов, вам нужно вручную указать, как их сочетать. Обычно вы делаете это, перебирая пройденные вами эффекты и применяя их по одному, рисуя свою сцену на каждой итерации.

+0

Я хотел бы добавить, что этот метод называется [многопроходной молнией] (https://www.google.com/search?q=multipass%20vs%20deferred%20lighting). – AgentFire