任意寬度反走樣線段繪製問題

2021-04-17 13:36:13 字數 493 閱讀 1319

呼叫windows gdi函式繪製的線段經常會出現「鋸齒」,看上去很不美觀,我們稱之為「走樣」。

顯示器畫素點的座標都為整數,而且畫素點之間存在「點距」。線段上點的座標經常會是浮點數,而且點與點是連續的。所以繪製線段時需要把浮點數轉換成整數,導致繪製的點偏離了準確的位置。這就是走樣的原因。

最根本的消除走樣的方法就是消除顯示器的點距,但這是不現實的。因此人們試圖從軟體的角度解決這個問題,即「反走樣演算法」。

反走樣演算法是一種從視覺上消除走樣的演算法,基本原理是根據實際點的座標將線的顏色和背景色進行混合,形成最終畫素點的顏色。

從反走樣的原理可知反走樣的效率受三方面影響:

1.計算點的座標的效率

2.混合顏色的效率

3.訪問畫素點顏色的效率

1、2兩點取決於數學計算,第3點取決於作業系統提供的介面的效率。例如windows提供了getpixel和setpixel來訪問畫素的顏色,但這兩個函式涉及到作業系統工作模式的切換,效率很低,所以快速訪問畫素很重要。

反走樣技術

直線掃瞄轉換演算法在處理非水平 非垂直且非45 的直線段時會出現鋸齒,這是因為直線段在光柵掃瞄顯示器上顯示的影象是由一系列亮度相同而面積不為零的離散畫素點構成的。這種由離散量表示連續量而引起的失真稱為走樣 aliasing 用於減輕走樣現象的技術稱為反走樣 anti aliasing,aa 或者抗鋸...

OPENGL簡介 反走樣

由於計算機以離散點生成圖形,生成圖形必然與真實景物存在差距,這種差距表現為 直線或光滑曲面的鋸齒 花紋失去原有色彩形狀 細小物體在畫面的消失等。統統叫做走樣 aliasing 反走樣可以減少這種情況。粗略設想一下,就是把原來邊界的地方鋸齒部分用低飽和度的點補上,這樣既不影響整體輪廓,又獲得較好的平滑...

OpenGL反走樣 待續

同時我們也注意到,我們所主要引用的參考文獻easy wireframe display with barycentric coordinates中提到了利用opengl內建函式fwidth實現反走樣的方法 在後面的工作中,找到了另外幾種實現反走樣的方法,蒐集對比一下,詳見該篇文章 drawing a...