2017-06-05 76 views
4

我想採取任何three.js幾何,並將其現有的面分成更小的面。這基本上給了幾何更高的「分辨率」。在three.js的例子中有一個細分修飾器工具,它對我所要做的事很好,但它最終會改變和變形幾何體的原始形狀。我想保留原來的形狀。目前細分改性劑的行爲方式應用three.js細分修改器而不更改外幾何?

View the Subdivision Modifier Example


實施例:

enter image description here

的我喜歡它粗糙示例的行爲:

enter image description here


細分修改器應用於這樣的:

let originalGeometry = new THREE.BoxGeometry(1, 1, 1); 
let subdivisionModifier = new THREE.SubdivisionModifier(3); 
let subdividedGeometry = originalGeometry.clone(); 
subdivisionModifier.modify(subdividedGeometry); 

我試圖將source of the subdivision modifier周圍挖,但我不知道如何修改它以獲得期望的結果。

注意:細分應該可以應用於任何幾何。我希望得到的結果的例子可能會使三維平面幾何體具有增加的片段效果,但我需要將其應用於各種幾何體。

+1

在SubdivisionModifier代碼中,它使用頂點和邊權重定位新的細分頂點。我沒有時間深入瞭解正在發生的事情,但如果您可以修改/替換定位邏輯以沿着原始邊緣放置新頂點,那麼您的幾何圖形應該保持其形狀,同時仍然細分爲更多面。 – TheJim01

+0

@ TheJim01謝謝,我一直在修改這些值,我想我接近一個解決方案。如果我找到一個可靠的解決方案,會發佈一個答案 – jackrugile

回答

5

根據TheJim01評論中的建議,我能夠挖掘原始來源並修改頂點權重,邊緣權重和Beta值以保留原始形狀。我的修改應該刪除任何平均值,並將所有權重放到源形狀。

有三個部分需要修改,所以我繼續前進,並將其設置爲可以傳入構造函數retainShape的選項,默認爲false。

我對修改過的SubdivisionGeometry.js代碼做了一個要點。

View the modified SubdivisionGeometry.js Gist


下面是與選項關閉,並打開被細分的立方體的一個示例。

左:new THREE.SubdivisionModifier(2, false);

右:new THREE.SubdivisionModifier(2, true);

enter image description here

如果有人運行到任何與此問題或有任何疑問,請讓我知道!

+1

這真的很酷。您應該將更改作爲「THREE.SubdivisionModifier」的增強功能提交! :) https://github.com/mrdoob/three.js/ – TheJim01

+1

太棒了!將嘗試儘快提交'THREE.BufferSubdivisionModifier'。 – jackrugile

+0

如果它的任何用途語義明智,在Blender中有一個選項使用細分修飾符在簡單模式,避免變形形狀,也許你可以命名你的財產簡單,因爲可能有一個它被稱爲的原因 – Neil