簡體   English   中英

使用GLSL創建深度緩沖直方圖紋理

[英]Create depth buffer histogram texture with GLSL

我正在使用當前上下文的深度緩沖區來影響我正在顯示的紋理。 紋理是1維的並且是灰度的。 從左到右代表從近到遠。 在一定深度處的像素越多,紋理在該點處越亮,黑色沒有像素在該深度處,並且白色是所有像素都在該深度處。

現在我有一個解決方案,在深度緩沖區上執行glReadPixels() ,在CPU上對其進行分析,然后將其寫回紋理。 當然,這是應用程序中的真正瓶頸。

我正在尋找一個全GPU解決方案,在着色器或某些東西中分析深度緩沖區並以這種方式更新紋理。 我考慮創建一個片段着色器,它讀取深度值並增加到紋理中的相應像素,但這需要片段着色器可以寫入其他紋理。 我學到的東西是禁忌,特別是如果他們必須寫同一個像素。

有沒有我缺少的技巧或技術,或者我被迫參與CPU?

作為@Tommy提議的升級,我建議使用PBO而不是頂點紋理提取:

  1. 將深度緩沖區復制到PBO中。
  2. 將PBO綁定為VBO,將頂點屬性(深度)綁定在其中。
  3. 使用與深度緩沖區分辨率一樣多的元素調用DrawArrays。 4 ...

幸運的是,有一個技巧:頂點着色器也可以對紋理進行采樣。 因此,您可以發出大量GL_POINTS,每個GL_POINTS對應於深度紋理中的單個片段,然后在頂點着色器中,您可以從深度紋理中讀取以確定該點的變換位置。 在你的片段着色器中,只需繪制一個具有合適alpha值的值,即可獲得所需的累積效果。

所以,你有頂點着色器讀取一個紋理,片段着色器不讀取任何紋理,你使用正常的渲染到紋理機制來寫你的直方圖。

暫無
暫無

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

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