2016-11-13 42 views
0

我正在嘗試用現代Opengl繪製矩形,使用着色器進行填充和描邊。我將填充顏色,筆觸顏色和筆觸寬度發送到片段着色器中的統一塊(以及矩形位置和大小)。將筆畫片段設置爲筆觸顏色並將填充片段填充到填充顏色的建議方法是什麼?GLSL中的2D矩形筆畫

目前,我有兩個想法在我腦海中浮動。首先,if語句檢查碎片座標是否位於矩形或矩形區域的邊界內,並根據該區域設置碎片顏色。這種方法會產生相當大的一個複雜的if語句,當它旋轉矩形時,它可能會變得更糟。 (另外,我讀過應該避免在着色器中分支)

我的第二個想法是使用帶符號的距離函數來確定顏色,但我不熟悉使用這些,我有這個想法他們不太擅長做尖角。

我在這裏脫穎而出嗎?有沒有更好的方法來做到這一點?

回答

0

片段着色器聽起來像一個舞臺,如果你想光柵化描邊,那就太遲了。在柵格化過程已執行之後,片段着色器被執行。如果我可以提出建議,我會考慮使用geometry shader來即時生成筆劃的幾何圖形。雖然可以逐步將數據添加到VBO是最好的解決方案(因爲大部分筆畫不會隨時間而改變)。如果您的繪圖區域的分辨率沒有改變,您還可以考慮將筆觸渲染爲紋理,並修改它。

0

您需要2個繪製調用,一個用於填充矩形,另一個用於未填充矩形。 你也可以使用這個庫https://github.com/memononen/nanovg

+0

通過填充和未填充,你是指一個繪圖調用筆畫幾何和一個繪製調用剩餘的填充幾何?另外,是的,我現在正在使用nanovg,但我正試圖建立自己的圖書館以擺脫它。 – user1435899

+0

是的,一個用於中風,一個用於填充。 建立你自己的圖書館是毫無意義的,你會得到很多的錯誤和非便攜式解決方案。麻省理工學院的許可證非常靈活,您可以輕鬆改進nanovg用於特殊用途。此外,nanovg可以輕鬆移植到DirectX,Vulkan和其他圖形API – quazeeee