【问题标题】:Clipping object in openGL ES在 openGL ES 中裁剪对象
【发布时间】:2014-02-20 00:53:51
【问题描述】:

我想裁剪和反对我的openGL ES 应用程序,应按以下方式完成:

左边是初始图像,中间是模板缓冲矩阵,右边是结果。

从我在这里读到的:Discard with stencil 可能有性能问题, 并且由于将被剪裁的模型将被旋转和平移,老实说,我不知道在这些动作之后绘制的模型是否会在错误的地方被剪掉。 会吗?

所以,我想到了深度缓冲区。 再举个例子:

(这张照片取自question.

假设黑色方块是可移动的,并且可能不仅仅是一个简单的方块,而是一个复杂的UIBezierPath

我想知道如何使用深度缓冲区,以便在正方形(或UIBezierPath)之外绘制的所有内容都将被剪掉,这意味着将左侧像素的所有 z 值调整为某个阈值,不会显示在屏幕上。

总结一下:

1) 如前所述,使用模板会很昂贵吗?

2) 是否可以在旋转和平移的对象上使用模板以便始终绘制它?

3) 使用深度缓冲区,是否可以找出正方形(或UIBezierPath)内部和外部的内容以及如何?以某种方式掩盖它?

4) 更好的方法是什么?

我知道要回答的问题很多,但由于它们都相互关联,我认为最好在同一个问题上提出。

【问题讨论】:

    标签: android ios opengl-es


    【解决方案1】:

    模板缓冲区是这里的方法。您提到的discard 答案是关于在片段着色器中使用discard 函数,这对于基于图块的延迟渲染GPU(即基本上每个移动GPU)来说非常昂贵。

    但是,使用模板缓冲区非常便宜,因为它存在于每个图块的芯片上,并且不会干扰延迟渲染。

    总结一下:

    1. 没有。
    2. 是的,模板缓冲区在转换后的顶点上的整个视口上以 2D 运行。应用模型变换后,它将剪切立方体。
    3. 是的,但不用说这很复杂,听起来有点像影子卷。
    4. 使用模板缓冲区。

    【讨论】:

      猜你喜欢
      • 2011-11-03
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 2011-05-21
      • 1970-01-01
      • 2011-11-24
      • 2013-02-14
      • 2012-01-21
      相关资源
      最近更新 更多