可能重复:
(win32) How to make an OpenGL rendering context with transparent background?
您好,
使用OpenGL& Win32,我想创建一个动态更新的半透明窗口。 基本上,我真正想要的是让我在框架中没有主动渲染的所有东西(即glClearColor()指定的“清晰”颜色)不会显示为窗口的一部分。
我开始时使用Win32函数创建一个无边框窗口(当我创建OpenGL窗口时),因此它将显示为“浮动”,并使用SetLayeredWindowAttributes并将LWA_COLORKEY设置为清晰颜色,以便自动生成像素那种颜色透明。这不起作用,仍不确定原因。一些想法可能有所帮助。
后来,我尝试从帧缓冲区中获取待渲染图像中的每个像素(因为它是双缓冲应用程序,我相信这是后缓冲区),并且(繁琐地)编写包含HREGION的内容所有的透明像素,并使用SetWindowRgn()对该结果的反转来达到预期的效果。但是,我无法在图像中的任何位置(甚至不是单个像素)找到任何具有“清晰颜色”(设置为粉红色= RGB(255,0,255))的像素,即使超过80%的图像是那种颜色。窗口位于其他窗口之上,因此像素“属于”该窗口,因此我认为这不是问题所在。我也相信这个解决方案(手动组合区域)很慢并且会产生糟糕的性能。
我找到了关于如何实现“半透明”窗口的示例,其中透明度蒙版是通过位图或类似方法静态实现的,但没有找到透明度每帧更改的良好示例。
任何帮助将不胜感激。 感谢。