簡體   English   中英

OpenGL 計算着色器從調用 ID 產生不正確的紋理坐標

[英]OpenGL compute shaders producing incorrect texture coordinates from invocation ID

我有一個計算着色器,它對深度 sampler2D 進行采樣,但是當使用 texture() 時,結果很奇怪,有一些鋸齒狀的邊緣。 如果我使用 texelFetch() 那么它工作正常,所以我猜它是獲取正確紋理坐標的問題? 僅供參考,采樣器使用最近的過濾並且沒有 mips。

這是使用texelFetch時結果的樣子: 使用 texelFetch()

這是使用texture時的結果: 使用紋理()

glsl着色器

texelFetch期望紋素的 integer 坐標; 您提供這些,它們是精確的,沒有舍入誤差,因此您看不到任何偽影。

texture*系列函數需要浮點坐標,然后通過floor(uv*size)公式將它們轉換回紋理坐標(假設它是帶有GL_NEAREST過濾器的GL_TEXTURE_2D ,這似乎是你的情況)。 uv正好位於紋素之間時,這種計算對浮點舍入誤差很敏感,這正是這里發生的情況。

為了解決這個問題,將 uv 坐標偏移半個像素:

vec2 TexCoord = (vec2(iuv) + 0.5)/vec2(size);

暫無
暫無

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

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