簡體   English   中英

在openGL ES中剪切對象

[英]Clipping object in openGL ES

我想裁剪並反對我的openGL ES應用程序,應該以以下方式完成:

模板緩沖

左邊是初始圖像,中間是模板緩沖區矩陣,右邊是結果。

從我在這里閱讀的內容: 丟棄模具可能會導致性能問題,並且由於將要裁剪的模型將被旋轉和平移,因此,老實說,我不知道繪制后的模型是否會在錯誤的位置被裁剪掉這些動作。 會嗎?

所以,我想到了深度緩沖。 再舉一個例子:

例

(這張照片是從這個問題拍攝的

假設黑色正方形是可移動的,並且可能不僅僅是一個簡單的正方形,而是一個復雜的UIBezierPath

我想知道如何使用深度緩沖區,以便將在正方形(或UIBezierPath )之外繪制的所有內容都剪切掉,這意味着將剩余像素的所有z值調整為某個閾值,該值不會顯示在屏幕。

因此,總結一下:

1)使用模具是否會如前所述昂貴?

2)是否可以在旋轉和平移的對象上使用模具,以便始終將其繪制?

3)使用深度緩沖區,是否可能找出正方形(或UIBezierPath )內部和外部(以及UIBezierPath )如何? 掩蓋它嗎?

4)什么是更好的方法?

我知道有很多要回答的問題,但是由於它們彼此相關,所以我認為最好在同一問題上提出。

模板緩沖區是前往此處的方法。 您引用的discard答案是關於在片段着色器中使用discard功能,這對於基於圖塊的延遲渲染GPU(即基本上每個移動GPU)而言都是非常昂貴的。

但是,使用模版緩沖區非常便宜,因為它存在於每個圖塊的芯片上,並且不會干擾延遲渲染。

總結一下:

  1. 沒有。
  2. 是的,模板緩沖區在轉換后的頂點上的整個視口上以2D方式操作。 應用了模型轉換后,它將裁剪多維數據集。
  3. 是的,但不用說這很復雜,聽起來與陰影體積相似。
  4. 使用模板緩沖區。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM