2015-02-09 58 views
0

我已经做了类似这样的东西在Monogame: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();  
+0

XNA或Monogame?他们不是100%相同 – MickyD 2015-02-28 08:12:53

+0

@MickyDuncan monogame,好吧他们是95%相同,其他5%大多数是不实施的东西 – dimitris93 2015-02-28 09:15:37

+0

谢谢你。我已经删除了'xna'标签 – MickyD 2015-02-28 10:28:44

回答

2

基本上,有两个选择:

  • 使用像素着色器来呈现照明子画面只在期望的区域或
  • 使用模板缓冲区和你之前使支柱到它适合照明精灵。

我不会详细解释这一点,因为这两种方式在gamedev stackexchange的this question广泛解释。

+0

哪一个你会推荐? – dimitris93 2015-02-09 19:27:12

+0

我个人会使用模板缓冲区,因为它的确切目的是为这种情况制作“模板”,特别是,在3D应用程序中。 – thegentlecat 2015-02-09 21:23:45

+0

我如何掩盖3D模型?我不认为这可能?我还需要知道如何做到这一点,因为我不仅需要“点亮”柱子,还要用这种方法“点亮”3D模型,你知道这是否可能? – dimitris93 2015-02-10 02:42:41