在 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 中使用顶点缓冲区对象绘图不起作用