2010-05-18 117 views
5

如何在OpenGL中剪裁渲染(简单的矩形区域)? 请发布一个C++示例。如何在OpenGL中剪裁渲染(C++)

+1

这可能更好地描述你试过的东西,如果有的话,而不是简单地要求示例代码。这里有一个OpenGL Red Book的链接,它可以免费在线,并且可能有关于你在找什么的信息。 http://www.glprogramming.com/red/ – Feanor 2010-05-18 22:06:00

+0

谢谢你的链接。我已经玩过glFrustum,预测等等,但是很久以前。我想接受一个很好的简单剪裁示例。 – 2010-05-18 22:15:45

回答

2

如果你只想显示特定矩形,你需要像glFrustrumglViewPort沿glOrtho的东西的组合。它实际上是glViewPort,它设置剪辑矩形。 glFrustrum,glOrthogluPerspective等),然后将一些真实坐标映射到那个矩形。通常情况下,您几乎不会注意到glViewPort,因为它通常设置为您正在使用的任何窗口的整个区域,并且您更改的是映射以在窗口中获取不同的视图。

如果您自己调整glFrustum(例如),屏幕上的显示区域将保持不变,您只需更改映射,以便仍然可以填充整个窗口区域,并且基本上只是移动虚拟相机,所以你放大或缩小(等)显示的“世界”。相反,如果您只调整glViewPort,则会显示完全相同的数据,但显示为较小的矩形。

要将数据“剪辑”到较小的矩形中,您需要一次调整两个方向,或多或少地调整“相反”方向,以便视角端口矩形变小,您可以放大视角以补偿视角。

7

你可能需要的是OpenGL的scissor机制。

剪辑渲染不属于由xywidthheight参数定义的矩形像素。

请注意,此OpenGL状态启用时,通过限制清除的区域影响glClear命令。

+0

如何防止所有将来呈现的场景对象被剪切矩形剪切?换句话说,如果您只想为GUI元素的子元素应用该剪切矩形,但是想要渲染场景中的其他对象,您将如何防止所有其他对象被该矩形剪裁? – BigSauce 2012-07-28 16:00:40

+0

我并不确切地知道你的意思,但通常的做法是通过使用FBO和通行证将GUI渲染与3D渲染分开。 – Stringer 2012-07-29 20:02:08