我想重現使用THREE.EdgesHelper
(在「硬」物體邊上繪製邊界)創建的效果,但使用自定義着色器而不是添加單獨的對象。基本上我想要做的是this demo,但僅限於「硬」的界限;例如不在兩個共面的邊界之間的邊界使用自定義着色器渲染「硬」邊緣
方法:對EdgesHelper
應用類似的例程,但使用自定義屬性標記處於硬邊緣的頂點(例如isEdge
);可能需要使用BufferGeometry
,因爲經常Geometry
允許重複使用頂點在多張人臉,但BufferGeometry
重複頂點,使得每個頂點只有一個面的一部分(至少,這是我的理解,文檔不明確)。
進展到目前爲止:
- 轉載於線框材料實例的效果,但使用
BufferGeometry
:http://jsfiddle.net/ogav6o77/ - 端口的
EdgesHelper
邏輯到與BufferGeometry
(但仍使用工作的「BufferEdgesHelper
」功能它創建一個THREE.Line
):http://jsfiddle.net/L2aertya/ - 試圖調整
BufferEdgesHelper
以將其結果保存在自定義屬性(isEdge
)中,然後閱讀該屬性在自定義着色器決定是否使邊緣或不時:http://jsfiddle.net/4tf4c6sf/
前兩個小提琴按預期方式工作,顯示出(1)由着色器呈現的白色線框邊緣,然後(2)從白邊着色器加上來自Line
的紅色「硬」邊緣。但是,(3)給出了相同的結果(2),而不是使用isEdge
屬性來決定是否畫線與否;我無法弄清楚爲什麼。
任何想法如何解決這個問題,以便只有硬着色邊緣由着色器渲染(例如紅色和白色線條重疊)?
謝謝!