Monogame "lighting" 个特定对象
Monogame "lighting" specific objects
我在 Monogame 中做过类似的事情:
我的问题是,我需要做些什么才能在柱子而不是背景上绘制灯光效果?使用 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();
基本上,您有 2 个选择:
- 使用像素着色器仅在所需区域渲染光照精灵或
- 在应用光照精灵之前,使用模板缓冲区并将柱子渲染到其中。
我不会详细解释这一点,因为在 gamedev stackexchange 的 this question 中对这两种方式都有广泛的解释。
我在 Monogame 中做过类似的事情:
我的问题是,我需要做些什么才能在柱子而不是背景上绘制灯光效果?使用 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();
基本上,您有 2 个选择:
- 使用像素着色器仅在所需区域渲染光照精灵或
- 在应用光照精灵之前,使用模板缓冲区并将柱子渲染到其中。
我不会详细解释这一点,因为在 gamedev stackexchange 的 this question 中对这两种方式都有广泛的解释。