在 C++.NET 中使用 OpenGL 并在视口上绘画
Using OpenGL in C++.NET and Painting Over the Viewport
我正在尝试创建一个使用OpenGL的.NET应用程序。我需要有 4 个视口,但我将有 1 个拆分为 4 个视口的控件,而不是创建 4 个控件并同步它们。我想在 OpenGL 控件上绘制线条以直观地拆分视口。我正在使用自定义控件,为此,我在基本 UserControl 的顶部有两个面板。中间的面板是 OpenGL 面板,其中渲染了 OpenGL 输出。顶部的面板是我要绘制视口分隔线的地方,它具有透明度,因此我可以看到它下面的面板。
问题是,当 OpenGL 视口加载时(它在单独的线程中,所以它只是黑色几秒钟),它会覆盖整个 UserControl,而不管它的 z 层如何。如果我缩小 OpenGL 面板,我可以看到它仍然只在面板上绘制,但它只是不关心它上面的内容——它只是掩盖了它。
为什么会这样?如果你想看看我是如何创建OpenGL上下文的,你可以看看我遵循的教程。我传递的是面板的句柄,而不是用户控件的句柄。custrom 控件中的所有控件是否共享相同的设备上下文或其他内容?
使用启用GL_SCISSOR_TEST的 glViewport
和 glScissor
的组合将窗口拆分为视口。使用 OpenGL 本身绘制视口拆分器。您可以随时更改使用的投影。因此,对于拆分器,使视口覆盖整个窗口,绘制拆分器,然后将视口限制在窗格上,并使用剪刀防止东西"泄漏"到它外面。
OpenGL不使用.net Windows表单在屏幕上绘制,它直接与图形硬件交互。实现所需目标的一种方法可能是将 opengl 输出呈现为屏幕外纹理/帧缓冲区 (fbo),然后以某种方式访问普通 .net UI 中的帧缓冲区。相反,我建议您简单地使用 OpenGL 调用绘制视口分隔线,并完全绕过使用 .net UI 元素。
- C++win32 API创建多个类似视口的窗口
- 使用C++在Qt3D中创建多个视口时出现问题
- 创建具有两个视口的Qt3D C++场景,其中显示适当的不同网格
- 尝试在虚幻引擎中通过C++添加视口时出错"No instance of overloaded function CreateWidget"
- 无法添加视口虚幻C
- C++ GLUT 使对象在视口外消失
- 如何在单独的视口和默认的framebuffer中使用framebuffer
- 在 C++.NET 中使用 OpenGL 并在视口上绘画
- VTK 定位摄像机以用对象填充视口
- 在 opengl 中视口的一角绘制世界坐标系
- 如何在 SDL2.0 OpenGL 中调整视口大小
- 在显示之前获取 QScrollArea 视口的大小
- 视口内的 OpenGL 视口
- MRPT:可以从视口获取图像
- OpenGL 'reshape()'函数视口边框背景
- OpenGL:多个重叠视口闪烁
- 如何为视口应用程序重新采样图像的子区域
- Opengl和DirectX视口和渲染目标
- 从视口坐标转换为[-1,1]^2顶点[ENGGL]
- OpenGL 3/GLFW空白视口