【发布时间】:2012-01-12 12:37:22
【问题描述】:
我正在使用 XNA 框架为 Windows Phone 7 编写一个简单的 2D 游戏。
基本上用户可以拖动多个项目。我通过在RenderTarget2D 上绘制东西来动态创建它们的纹理,然后再绘制RenderTarget2D。我使用 模板缓冲区 将较大纹理的一部分绘制到渲染目标上。
代码 sn-p
util.GraphicsDevice.SetRenderTarget(result);
util.GraphicsDevice.Clear(ClearOptions.Target | ClearOptions.Stencil | ClearOptions.DepthBuffer, Color.Transparent, 0, 0);
// The "mask"
spriteBatch.Begin(SpriteSortMode.Deferred, util.DontWriteColorsState, null, util.StencilAlways, null, alphaTestEffect);
spriteBatch.Draw(maskTexture, destination, Color.White);
spriteBatch.End();
// The actual texture
spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, null, util.StencilKeepWhere1, null, alphaTestEffect);
spriteBatch.Draw(bigTexture, destination, source, Color.White);
spriteBatch.End();
util.GraphicsDevice.SetRenderTarget(null);
(util 只是一个帮助器类的实例,我使用它是为了不必在任何地方复制粘贴相同的代码,它包含 DepthStencilState 对象和其他一些东西。) em>
我想在这些纹理后面创建一个阴影效果。我想在渲染目标上绘制阴影。
不幸的是,Windows Phone 7 不支持自定义着色器效果,因此我无法使用互联网上的任何示例。所以我决定尝试在软件中实现它。但是我对这种东西完全没有经验,所以结果既慢又丑。
我在软件中所做的是:
- 围绕蒙版纹理创建了一个笔触,并以低不透明度进行绘制
- 围绕前一个笔画创建一个笔画,并以低不透明度进行绘制
- ...此步骤的重复次数与投影的大小相同
但是,它非常慢,基本上慢得让人无法接受。
所以问题是
是否可以使用 XNA 中的内置效果创建阴影或阴影效果?另外,如果没有,是否有一种算法可以在软件中创建漂亮的投影?
提前感谢您的回答! :)
编辑:
我正在考虑这种阴影:
显然,这只是一个插图,我不希望它完全是这个尺寸。 :)
【问题讨论】:
标签: c# .net windows-phone-7 xna windows-phone-7.1