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

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

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

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

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

【问题讨论】:

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

标签: android graphics opengl-es 2d culling


【解决方案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;
}
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-21
    • 1970-01-01
    相关资源
    最近更新 更多