2014-03-24 46 views
0

我想確定在Three.js(webgl)中使用着色器處理自定義虛線的最佳方法。這些虛線可以具有不同的圖案。我希望我能夠編寫一個可以處理任何破折號模式的着色器。該模式將由一組值(例如[0.125, -0.125, 0.250, -0.250])給出,其中負值是空格的長度,正值是短劃線的長度。我可以爲每次調用使用不同數組的着色器,還是應該製作多個着色器?

我是着色器新手,我不確定上述是否可行。如果我理解正確,統一數組將不合適,因爲我希望此數組根據在特定線實體上繪製的模式進行更改。但我不認爲屬性數組是合適的,因爲它似乎是與頂點關聯的一組值。那麼,我想要做什麼或者我必須爲每種模式動態製作着色器?

到目前爲止,我能正確理解這一點嗎?有什麼建議麼?這是我第一次(也只是希望)需要使用着色器。

+0

看看是否有幫助:http://threejs.org/examples/webgl_lines_dashed.html。在'ShaderLib.js'中搜索'dashed'。 – WestLangley

+0

是的,我已經看過。這是一個非常基礎的着色器,只有gapSize和dashSize,並且不符合我的任何要求。非常感謝 – bzuillsmith

+0

您的項目聽起來很有趣。如果你願意分享你的成果,那就太棒了!但要小心,着色器可以在你身上生長。 :-) – WestLangley

回答

1

你必須使用統一或屬性;在WebGL中兩者之間沒有任何「介入」,其他可能的實現最終將依賴於統一的或屬性(或常量)的數據。

  • 如果你使用一個統一的,可以設置虛線樣式在繪製調用的所有行,但是不會單獨線路。

  • 如果使用屬性,則必須爲行中的每個頂點重複選擇虛線模式。這與例如通常的處理沒有什麼不同。彩色線條,你必須在每個頂點給出相同的顏色。

    如果您擔心的是總體數據大小,則可以執行間接操作,例如將多個短劃線模式存儲在統一數組或紋理中,然後使用屬性查找所需模式。這將允許您使用一個數字而不是每個頂點四個。

+0

感謝您確認我的懷疑和建議。我可能會走一個統一數組或紋理中的所有數據的路線,並使用屬性來查找所需的模式。再次感謝! – bzuillsmith