C++ OpenGL - 叠加示例

标签 c++ opengl overlay

我有一个需要尽快处理的 OpenGL 应用程序(迷宫式)。我目前的问题如下:

  • 我的主窗口上有 3 个子窗口,它们都运行良好。显然我应该只使用一个子窗口,左侧的子窗口(较小的)应该显示为覆盖。我的实际应用程序具有以下窗口显示:

Actual window display

我想做这样的事情:

Desired display

我已经在互联网上搜索过,到目前为止我还没有发现任何关于这个主题的信息。有什么地方可以让我了解如何解决这个问题吗?

非常感谢。

最佳答案

您可以将叠加层渲染为纹理,然后将其渲染到屏幕上任何您想要的位置。查看 gl*FrameBuffer 函数。它可能看起来像这样:

// Create a texture to render to
glGenTextures(1, &overlay_tex);
glBindTexture(GL_TEXTURE_2D, overlay_tex);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
// NULL means reserve texture memory
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0, GL_BGRA, GL_UNSIGNED_BYTE, NULL);

glGenFramebuffers(1, &fb);
glBindFramebuffer(GL_FRAMEBUFFER, fb);
// Attach the texture to the framebuffer
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, overlay_tex, 0);

glGenRenderbuffers(1, &depth_rb);
glBindRenderbuffer(GL_RENDERBUFFER, depth_rb);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24, width, height);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depth_rb);

glBindFramebuffer(GL_FRAMEBUFFER, fb);

// Render your overlay here

glBindFramebuffer(GL_FRAMEBUFFER, 0);

// Render to the backbuffer again

关于C++ OpenGL - 叠加示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34823188/

相关文章:

c++ - 如何在 Windows 7 上获取 gethostid 行为?

opengl - SDL2 和 3D 渲染

java - 如何在 Java Swing 中重叠面板?

html - 覆盖居中/垂直对齐的消息

C++/CLI Visual C++ 2010 Express - 绘制多个椭圆

c++ - 友元类声明和成员函数声明

c++ - 如何使用C++测量Mac OS上多线程程序的时间成本?

c++ - 在 OpenGL 中可视化 4D 对象

c++ - 鼠标移动opengl

css - 带有阴影+文本覆盖和悬停时另一个覆盖的 Bootstrap 响应图像