2017-06-05 23 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