我应该如何在我的OpenGL视口中实现子窗口?在我的视口内,我想在标签的左侧留出一些空间,并在边缘周围留出一些空间作为边框。我已经确定了所有坐标,并且所有显示都正常。我的问题是在一个子窗口中将事件剪辑到其他窗口。我似乎无法弄清楚OpenGL 3.3,核心上下文的处事方式是什么。是否到我应该如何在我的OpenGL视口中实现子窗口?
- 使用per-vertex clipping?
- 剪刀试验?
- a模具测试?
- 将framebuffer与我窗口的不同部分相关联?
我应该查看哪些命令?
我应该如何在我的OpenGL视口中实现子窗口?在我的视口内,我想在标签的左侧留出一些空间,并在边缘周围留出一些空间作为边框。我已经确定了所有坐标,并且所有显示都正常。我的问题是在一个子窗口中将事件剪辑到其他窗口。我似乎无法弄清楚OpenGL 3.3,核心上下文的处事方式是什么。是否到我应该如何在我的OpenGL视口中实现子窗口?
我应该查看哪些命令?
之前我花时间写一个完整的答案,我想请你确认这是你在你原来的问题进行了说明:
*---------------------------------------*
| ------------------------------------- |
| | | | |
| | | | |
| | | | |
|C| A | B |C|
| | | | |
| | | | |
| |___|_______________________________| |
*---------------------------------------*
A = Labels
B = Main Window
C = Border
是的,就是这样。但是我自己设置矩阵并没有问题。我的问题是,当我画B时,它溢出到A和C中,我需要剪裁该输出。 –
另外,请不要担心边框,因为我认为这可能会使您的解决方案变得复杂 - 只是想出如何区分A和B将使我更容易实现这一点。谢谢。 –
要清楚的是,当您绘制到B中时,您正在使用具有子窗口B边界的投影矩阵?如果是这种情况,剪辑将被破坏。在OpenGL中裁剪工作的方式是,如果在投影之后,基元中的任何顶点具有> Clip.W或<-Clip.W的坐标,则裁剪边缘(s)。看看[***这个页面***](http://www.songho.ca/opengl/gl_projectionmatrix。html)以获取更多细节,并忽略图中的术语“视口”(如果您认为视口与投影矩阵具有相同的尺寸,则此图仅适用)。 –
使用'glViewport(...)'限制区域您的帧缓冲区的几何投影到哪里。将屏幕的一部分剪掉或模板化将效率降低,并且会丢失信息 - 有点像电视上的缩放图片模式。每个顶点剪切也无济于事,你需要在原始层面上进行剪裁来做这样的事情。 –
@ AndonM.Coleman:谢谢你的回答,但你确定会剪辑吗? http://www.opengl.org/discussion_boards/showthread.php/142880-glViewPort-doesn-clip –
当然,它不会剪裁任何东西,剪裁后发生视口映射***。剪切主要由您的投影矩阵定义,视口只是定义了剪裁的几何图形被光栅化到的屏幕区域。为了简单起见,它定义了***已经被剪切的几何图形如何被拉伸以填充屏幕。 –