在 OpenGL ES 中,如何将绘图“剪辑”到矩形?

Posted

技术标签:

【中文标题】在 OpenGL ES 中,如何将绘图“剪辑”到矩形?【英文标题】:In OpenGL ES, how can I "clip" drawing to a rectangle? 【发布时间】:2013-04-03 01:14:41 【问题描述】:

我正在开发一个使用单个 OpenGL ES 实例的 android 应用程序。在某些情况下,我会在其他所有内容之上绘制一个自定义(矩形)对话框,其中包含滚动文本、线条等。该对话框不会占据整个屏幕,并且我正在绘制的内容更大 而不是对话框,它在对话框中滚动,就像一个选取框。

当然,因为我正在绘制这个对话框last(在所有其他视图之上),我正在绘制的所有顶点都将是可见的,但我想告诉 OpenGL not 在任何渲染命令的对话框矩形之外绘制。像这样……

我的大部分绘图都是使用glDrawArrays(...) 使用FloatBuffer 数组完成的。我想要的是一种向 OpenGL 指定我希望 任何 绘图在指定区域之外不可见的方法。

我对剔除了解不多,但这似乎与我正在寻找的内容非常相关。但是,剔除似乎只是为了跳过从 3D 相机视图中“看到”的三角形的绘制,而我想“跳过”在视口内任意矩形之外的任何三角形的绘制.

【问题讨论】:

您要查找的术语是“剪辑”。如果三角形在视锥体之外,opengl 会自动裁剪它们。我应该补充一点,如果您需要在视口内剪辑片段,则必须使用剪刀。 谢谢你,剪裁正是我所需要的! 【参考方案1】:

如果您知道如何将纹理保存为类引用,则可以使用它,当您来回滚动或任何您可以更改其中的参数时

public class TextureRegion     
public final float u1, v1;
public final float u2, v2;
public final Texture texture;

public TextureRegion(Texture texture, float x, float y, float width, float height) 
    this.u1 = x / texture.width;
    this.v1 = y / texture.height;
    this.u2 = this.u1 + width / texture.width;
    this.v2 = this.v1 + height / texture.height;        
    this.texture = texture;


【讨论】:

以上是关于在 OpenGL ES 中,如何将绘图“剪辑”到矩形?的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL ES 1.1 clearColor 绘图

在 OpenGL ES 1.1 中使用顶点缓冲区对象绘图不起作用

PPAPI中使用OpenGL ES绘图

OpenGL-ES 益智游戏 - 使绘图电池高效?

Android OpenGL ES 纹理映射/绘图问题 - 倾斜图像

在 OpenGL ES Android 中使用 glBufferSubData 和 glMultiDrawArrays