Моноигра освещает определенные объекты

Я сделал что-то подобное в Monogame:

2

3

Мой вопрос: что мне нужно сделать, чтобы нарисовать этот световой эффект только на колонне, а не на фоне? Есть ли что-то вроде игнорирования определенных спрайтов при использовании BlendState.Additive? Как это будет работать? Вот как я его сейчас рисую.

//draw background
spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.Opaque);
spriteBatch.Draw(Background, Vector2.Zero, Color.White);
spriteBatch.End();

//draw pillar
spriteBatch.Begin(SpriteSortMode.Deferred);
spriteBatch.Draw(Texture, new Rectangle(PillarX, PillarY, Width, Height), Color.White);
spriteBatch.End();

//draw lighting sprite in additive mode
spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.Additive);
spriteBatch.Draw(LightTexture, pos, null, Color.OrangeRed, 0f, Vector2.Zero, 
    scale, SpriteEffects.None, 0f);
spriteBatch.End();    

person dimitris93    schedule 09.02.2015    source источник
comment
XNA или моногейм? Они не на 100% одинаковы   -  person MickyD    schedule 28.02.2015
comment
Моноигра @MickyDuncan, ну да, они на 95% одинаковы, остальные 5% в основном не реализованы   -  person dimitris93    schedule 28.02.2015
comment
Спасибо. Я удалил тег xna   -  person MickyD    schedule 28.02.2015


Ответы (1)


По сути, у вас есть 2 варианта:

  • Используйте пиксельный шейдер для рендеринга спрайта освещения только в нужной области или
  • Используйте буфер трафарета и визуализируйте в нем колонну, прежде чем применять спрайт освещения.

Я не буду объяснять это подробно, потому что оба способа подробно описаны на этот вопрос обмена стеками разработчиков игр.

person thegentlecat    schedule 09.02.2015
comment
какой бы вы порекомендовали? - person dimitris93; 09.02.2015
comment
Лично я бы выбрал буфер трафаретов, потому что его цель - создавать трафареты для таких ситуаций, особенно. в 3D-приложениях. - person thegentlecat; 10.02.2015
comment
как я могу замаскировать 3D-модель? я не думаю, что это возможно? Мне нужно знать, как это сделать, потому что мне нужно подсветить не только колонну, но и 3D-модели с помощью этого метода. Знаете ли вы, возможно ли это? - person dimitris93; 10.02.2015
comment
На самом деле вы маскируете не 3D-модель, а ее визуализированный силуэт. Это та же процедура, что и со спрайтом: сначала вы визуализируете модель в свою сцену, затем в буфер трафарета, а после этого вы визуализируете спрайт освещения с активным буфером трафарета. - person thegentlecat; 10.02.2015