【发布时间】:2012-05-10 19:52:02
【问题描述】:
所以,我正在尝试在 XNA 中制作游戏,并且我正在将像素着色器应用到我的关卡,以便我可以在游戏画面中添加效果。着色器本身运行良好,但它有一个缺陷确实会降低性能。只要着色器处于活动状态,我在屏幕上绘制的任何内容就好像它是以最大 Alpha 通道绘制的一样。我使用 XNA 内置的 Color 类绘制了很多东西,其中大部分都有不同的 alpha。然而,着色器似乎忽略了所有这些。即使我只是从着色器返回源,也会发生这种情况。
我已经看到了一些可能的解决方案。其中第一个是绘制到 RenderTarget2D,虽然这确实解决了这个问题,但它导致了更严重的 alpha 问题,我什至不想进入。
我看到一些人声称将颜色乘以着色器中的 alpha 值似乎有帮助,但这完全没有区别,这对我来说表明 alpha 值输入总是被读取为 1。
这里有一些图片来说明我的问题:
希望有人知道如何解决这个问题。
【问题讨论】:
-
我做了更多的测试。似乎 XNA 的 SpriteBatch.Draw 方法中对颜色的任何更改都已删除,从而使所有纹理都使用“Color.White”进行绘制。这对我来说很成问题。
-
是的,如果您的像素着色器忽略了 alpha 值,或者没有传递它,那么您在使用该着色器时会看到这种效果。发布您的着色器代码。
-
在发现它忽略了所有的色调效果,而不仅仅是 alpha 之后,我进行了稍微不同的搜索,并找到了我的解决方案。我会把这个留在这里,以防有人遇到同样的问题。我找到的解决方案在这里:forums.create.msdn.com/forums/t/35420.aspx 它使用 SpriteBatch 颜色参数并简单地将输入乘以它,从而为您提供所需的色调。感谢您尝试提供帮助。作为记录,我的着色器中几乎没有代码。它接受了一个颜色参数并返回它。
-
是的,我的意思是,我已经明确尝试返回 Alpha 为 0 的颜色,但它仍然将像素放在屏幕上。 -- 什么鬼?