2012-01-05 118 views
2

我試圖通過從頂部開始逐行繪製一個反鋸齒梯形。當線不是像素的整數時,末端像素是背景灰度和梯形灰度的加權平均,例如,如果線路是128.5個像素長,然後在每個端部,該灰度級是:繪製一個反鋸齒梯形

0.25*(trapezoid_greylevel)+0.75*(background_greylevel) 

不幸結果不是非常平滑的(我已經檢查這個線性化的顯示器上):

Jagged trapezoid

我認爲在每行結束時,我需要考慮到所有圍繞它在適當的灰度到達的像素,但我不能工作了如何做到這一點。任何指針?

回答

2

由於梯形是凸的,所以很容易就梯形進行分類:如果梯形在所有梯形邊的左側(假設梯形沿逆時針方向),則點在內側。假設正方形像素(以及大於像素的梯形),則可以通過對它們的角進行分類來容易地將像素相對於梯形進行分類:如果所有四個角都在外側,則像素在外側;如果所有四個角都在裏面,那麼像素就在裏面。對於其他像素,您可以通過超級採樣進行抗混疊。

您也可以使用如Warnock's algorithm中的四叉樹進行自適應渲染,但是您必須針對梯形(或通常的凸多邊形)實施更穩健的交叉點測試。你只需要檢測一個正方形和梯形不相交,或者當梯形內有一個正方形時。像素級以外的四叉樹深度將決定抗鋸齒效果如何。

最後,您還可以通過計算梯形所覆蓋的像素區域的百分比來精確地繪製。這是多邊形裁剪的問題,您可以使用Sutherland–Hodgman algorithm

+0

@Robs,如果你最終實現了這一點,我希望看到圖像和代碼,如果你可以分享。謝謝。 – lhf 2012-01-13 18:12:17

0

如果速度不是問題,一個可能的解決方案是繪製4或8倍分辨率的非抗鋸齒梯形,然後線性縮小圖像。