簡體   English   中英

2D幾何輪廓着色器

[英]2D geometry outline shader

我想創建一個着色器以概述2D幾何。 我正在使用OpenGL ES2.0。 我不想使用卷積濾鏡,因為輪廓不依賴於紋理,而且速度太慢(我嘗試將帶紋理的幾何體渲染為另一種紋理,然后使用卷積着色器進行繪制)。 我還嘗試了2次遍歷,首先是單色上標過比例的幾何圖形來表示一個輸卵管,然后是頂部的法線繪制,但這會導致厚度不同或輪廓未對齊。 我正在研究cel陰影中的輪廓是如何完成的,但是它們都是使用法線和光計算的,我根本不使用它們。

我將Box2D用於物理,並且具有帶有多個固定裝置的“可破壞”對象。 任何時候都可以分解對象(刪除固定裝置),並且我希望輪廓線跟隨新的計數器。 我正在使用頂點緩沖區進行繪制,該頂點緩沖區與燈具的頂點,預設的紋理坐標以及用於繪制三角形的索引相匹配。 移除夾具后,它在索引緩沖區中的關聯索引將設置為0,因此不再在此處繪制三角形。 下圖顯示了一個完整的對象的外觀。 紅點是頂點位置(未顯示紋理),黑線是燈具,藍線表示三角形的繪制方式。 在任何情況下,灰色輪廓都是我希望輪廓看起來像的樣子。

1個

此圖顯示了相同的對象,但移除了一些固定裝置。

2

是否可以在頂點着色器中(或與其他簡單方法結合使用)做到這一點? 任何幫助,將不勝感激。

謝謝 :)

假設您能夠對那些從角落稍微插入的尷尬點做一些處理(例如,如果您按英語閱讀順序對這些點進行編號,第一個為“ 1”,則點6將為一個)...

如果一個點在內部,則如果您按順時針順序列出與其連接的所有多邊形邊,則按順序排列的每一對邊將有一個共同的多邊形。 如果任意兩個邊沒有共同的多邊形,則為外部點。

從任何外部點開始,然后通過首先沿任意方向行走,然后沿與尚未訪問的外部點相連的任何邊緣(或者,這不是您僅沿其走過的邊緣)來獲得整個輪廓現在)。

從現有輪廓開始並刪除一些零件,您顯然可以從以前用於連接到另一個但不再連接的任何一個外部點開始,然后從那里步行直到到達另一個。

您無法在ES下的着色器中處理這些內容,因為您沒有獲得連接信息。


我認為在着色器中最好的方法是通過沿頂點的法線向外推動頂點來擴展其幾何形狀。 假設您的數據結構是一個矩形列表,每個矩形都由一個中心,一個寬度和一個高度描述,則可以通過繪制具有相同中心的每個矩形,但在寬度和高度上添加少量來實現相同的目的。

要完全概括,您需要將法線存儲在頂點上,而且還需要在移除幾何圖形時對其進行更新。 因此,會有一些來自CPU的新信息推送,但是相對來說是有限的。

暫無
暫無

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

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