我正在尝试使用XNA进行叠加。遇到麻烦让它变得透明

时间:2014-03-11 00:17:52

标签: c# xna transparency

无论我做什么,我都无法弄清楚如何使XNA游戏完全透明。

http://vitrite.vanmiddlesworth.org/vitrite/shot-full.png

这是我的意思的一个例子。因为命令提示符是部分透明的,我试图自己这样做。

甚至可以在XNA中使用吗?

1 个答案:

答案 0 :(得分:0)

如果没有使用XNA因其D3D版本而不支持的界面,那么很难让它真正透明,但有些解决方法可以满足您的需求。

您可以通过挂钩到Windows API并抓取窗口最后渲染的“客户区”的图像(桌面只是一个特殊窗口)来获得类似的外观。在您的情况下,您可以获得您的所有其他窗口重叠,抓住客户区域,使用您的相对位置/大小剪切它们,然后在着色器中将它们混合在一起。警告:这可能会在更新时出现性能问题,具体取决于您自己“在”下方的窗口数量。我建议从窗口挂钩更新,这样你只会在有变化或窗户移动时捕捉等等。

在Windows API中查看这些:

[DllImport("user32.dll")]
public static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);
[DllImport("user32.dll")]
public static extern bool PrintWindow(IntPtr hWnd, IntPtr hdcBlt, int nFlags);

请注意,这无助于为窗口边框提供任何伪造的透明度,只有渲染区域。

另见:Transparent window layer that is click-through and always stays on top

您也可以使用该线程中的一些信息。