OpenFrameworks中的透明背景窗口
Transparent background window in OpenFrameworks
我正在尝试创建一个捕捉触摸事件的不可见覆盖(它将负责使用oscpack
发送数据包)。因此,我需要创建一个透明的全屏窗口。(编辑:如果交叉兼容性有问题,win32就可以了)
在官方文档中,ofBackground
似乎接受alpha混合,但当我编写ofBackground(0, 255, 0, 10);
并运行项目时,窗口是不透明的。我也尝试过使用ofEnableAlphaBlending();
,但结果是一样的。(我认为它只允许新绘制的东西进行阿尔法混合)
我试着挖掘更多,我在这个方法中发现了一个小评论:
ofAppGlutWindow::setupOpenGL(int w, int h, int screenMode)
{
//code
}
/*
ofBackground(200,200,200); // default bg color
ofSetColor(0xFFFFFF); // default draw color
// used to be black, but
// black + texture = black
// so maybe grey bg
// and "white" fg color
// as default works the best...
*/
这并没有像我最初想的那样帮助我,我仍然被卡住了。
您不能直接使用openFrameworks来实现这一点。您需要创建一个具有透明背景的OpenGL上下文。这很难做到,我不知道你是否可以将它与oF集成,但你可以测试一下。
然而,如果你在OSX上,有这个插件:ofxTransparentWindow
一个肮脏的技巧是抓取你的桌面图像,并将其作为背景放在你的应用程序中。
截至2023年3月!现在,对于Windows、macOS和Linux,您可以使用以下设置在GLFW openFrameworks中启用透明度。
ofGLFWWindowSettings settings;
settings.transparent = true;
因此,以下将是main.cpp的示例:
int main( ){
//Use ofGLFWWindowSettings for more options like multi-monitor fullscreen
ofGLFWWindowSettings settings;
settings.setSize(1024, 768);
settings.windowMode = OF_WINDOW; //can also be OF_FULLSCREEN
settings.glVersionMajor = 3.0;
settings.glVersionMinor = 3.0;
settings.transparent = true;
auto window = ofCreateWindow(settings);
ofRunApp(window, make_shared<ofApp>());
ofRunMainLoop();
}
然后,您所需要做的就是通过clear方法清除每帧的后缓冲区。
ofClear(0.0f, 0.0f, 0.0f, 0.0f);
所以在App::draw()的一个例子中,在开始时清除缓冲区
void ofApp::draw(){
ofClear(0.0f, 0.0f, 0.0f, 0.0f);
// other draw code after clear
}
从技术上讲,这是通过GLFW提示-GLFW_TRANSPARENT_FRAMEBUFFER实现的,该提示现在使用settings.TRANSPARENT作为其值。
- 如何设置与其背景图像大小相对应的窗口大小?
- 如何为使用创建窗口创建的窗口创建自定义背景颜色
- 使用winapi使用按钮更改窗口的背景颜色
- 如何在QT中获取背景应用程序窗口标题
- 一个标签,其背景一方面是透明的,另一方面是上部窗口
- 无法更改另一个窗口内窗口的背景颜色
- 将鼠标和键盘输入传递到背景窗口而不会失去焦点
- 鼠标单击背景窗口,而无需移动鼠标C
- 在父窗口中更改背景颜色
- 窗口 - 锁定程序背景
- 背景过程没有窗口
- 打开不同的图像文件,并使用GDI 库在主应用程序窗口的背景上绘制它们
- 在 MFC 窗口中使用 PNG 作为背景图像
- C++(LINUX)使用DevIL设置X11窗口背景
- OpenFrameworks中的透明背景窗口
- (2.3.1)将背景纹理的比例设置为渲染窗口大小
- 无法更改窗口背景
- 窗口背景,如窗口 7 的标题栏
- C++ Win32 窗口背景不重绘
- 好奇心:背景C++窗口.SFML/SDL类型和Qt(GUI)类型之间的差异