我正在尝试使用任何three.js几何体并将其现有面细分为更小的面。这基本上可以使几何图形具有更高的分辨率"。在three.js的示例中有一个细分修改器工具,它非常适合我尝试做的事情,但它最终会改变并变形几何体的原始形状。我想保留原来的形状。
View the Subdivision Modifier Example
当前细分修饰符的行为示例:
我喜欢它的表现的粗略例子:
细分修饰符的应用方式如下:
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,但我不确定如何修改它以获得所需的结果。
注意:细分应该可以应用于任何几何体。我想要的结果的例子可能会使得看起来具有增加的段的three.js PlaneGeometry可以工作,但我需要将它应用于各种几何。
答案 0 :(得分:6)
根据TheJim01评论中的建议,我能够挖掘原始来源并修改顶点权重,边缘权重和β值以保留原始形状。我的修改应该删除任何平均值,并将所有权重放在源形状上。
有三个部分需要修改,所以我继续将它作为一个选项,可以传递给名为retainShape
的构造函数,默认为false。
我对SubdivisionGeometry.js的修改代码做了一个要点。
<强> View the modified SubdivisionGeometry.js Gist 强>
下面是一个关闭多维数据集的示例,关闭该选项并打开。
左: new THREE.SubdivisionModifier(2, false);
右: new THREE.SubdivisionModifier(2, true);
如果有人遇到任何问题或有任何疑问,请告诉我们!
答案 1 :(得分:0)
当前版本的three.js具有PlaneGeometry的可选参数,用于指定宽度和高度的段数;两者都默认为1。在下面的示例中,将widthSegments和heightSegments都设置为128。这与使用SubdivisionModifier的效果类似。实际上,SubdivisionModifier会扭曲形状,但是指定线段不会扭曲形状,并且对我来说效果更好。
var widthSegments = 128;
var heightSegments = 128;
var geometry = new THREE.PlaneGeometry(10, 10, widthSegments, heightSegments);
// var geometry = new THREE.PlaneGeoemtry(10,10); // segments default to 1
// var modifier = new THREE.SubdivisionModifier( 7 );
// geometry = modifier.modify(geometry);