Opengl es 在OpenGLES中将图形限制为矩形

Opengl es 在OpenGLES中将图形限制为矩形,opengl-es,Opengl Es,我需要将对象的绘制限制为矩形。我不能仅仅更改视口以匹配矩形,因为ModelView矩阵(应该更改矩形,但不更改内容)可能不是标识。一个可行的解决方案是绘制与矩形匹配的FBO,然后将FBO绘制到屏幕上,但速度似乎较慢。有没有更好的选择呢?如果我没弄错的话,这应该是您正在寻找的功能。它将渲染裁剪为视口的选定子矩形。这不会修改视口。因此,对象在屏幕上覆盖相同的大小,它只是防止您在剪刀区域之外绘制任何像素。如果这不是您想要的,并且希望子矩形包含整个场景,从而缩小对象,那么更改视口是您选择的解决方案 编辑

我需要将对象的绘制限制为矩形。我不能仅仅更改视口以匹配矩形,因为ModelView矩阵(应该更改矩形,但不更改内容)可能不是标识。一个可行的解决方案是绘制与矩形匹配的FBO,然后将FBO绘制到屏幕上,但速度似乎较慢。有没有更好的选择呢?

如果我没弄错的话,这应该是您正在寻找的功能。它将渲染裁剪为视口的选定子矩形。这不会修改视口。因此,对象在屏幕上覆盖相同的大小,它只是防止您在剪刀区域之外绘制任何像素。如果这不是您想要的,并且希望子矩形包含整个场景,从而缩小对象,那么更改视口是您选择的解决方案


编辑:如果希望矩形可变换,尤其是可旋转(因此不再是屏幕上的矩形),则渲染为FBO并将其用作四边形上的纹理可能是最佳解决方案。否则,您也可以在投影后修改顶点坐标,从而将目标矩形的变换矩阵与投影矩阵相乘,并将其用作新的投影矩阵,但我不能完全确定这一点(但至少类似的东西应该可以做到这一点。

glScissors确实比临时更改视口好得多,谢谢。但是,是否有办法用世界坐标而不是视图坐标来定义区域?如果没有,我想我只需选择当前矩阵并将其转换为视图,这似乎是一种解决方法。目前,矩形不会如果是可旋转的,也可以使用可旋转的,但由于它是用于移动应用程序,FBO的开销将太大。