【发布时间】:2014-03-13 03:49:42
【问题描述】:
我应该如何在我的 OpenGL 视口中实现子窗口?在我的视口内,我想在左侧为标签保留一些空间,并在边缘周围保留一些空间作为边框。我已经计算出了所有坐标,并且一切都正常显示。我的问题是将溢出到其他子窗口的东西剪裁在一个子窗口中。我似乎无法弄清楚 OpenGL 3.3 的核心上下文做事方式是什么。是不是
- 使用逐顶点剪辑?
- 剪刀测试?
- 模板测试?
- 将帧缓冲区与窗口的不同部分相关联?
我应该查看哪些命令?
【问题讨论】:
-
使用
glViewport (...)限制您的帧缓冲区中几何体投影到的区域。剪掉或刻掉屏幕的一部分会降低效率,而且您会丢失信息——有点像电视上的缩放图片模式。每顶点裁剪也无济于事,您需要在原始级别进行裁剪才能执行此类操作。 -
@AndonM.Coleman:谢谢你的回答,但你确定会剪辑吗? opengl.org/discussion_boards/showthread.php/…
-
当然它不会剪切任何东西,视口映射发生在剪切之后。裁剪主要由您的投影矩阵定义,视口只定义了被裁剪的几何图形被光栅化到的屏幕区域。为了简化这一点,它定义了已经裁剪的几何图形如何被拉伸以填满你的屏幕。
-
@AndonM.Coleman:抱歉,我实际上显示的一切都很好。我的问题实际上是剪辑。我会让我的问题更清楚。
-
我仍然建议为每个子窗口使用不同的投影矩阵和视口。这是因为在较新版本的 GL 中,您可以在几何着色器中使用视口数组。这样子窗口真的很容易实现,而且您不必担心模板测试或剪裁,因为如果您为每个子窗口正确设置投影矩阵,剪裁就已经完成了。