【问题标题】:Apply three.js subdivision modifier without changing outer geometry?应用 three.js 细分修改器而不改变外部几何?
【发布时间】:2017-06-05 16:49:12
【问题描述】:

我正在尝试采用任何 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 看起来可行,但我需要将其应用于各种几何。

【问题讨论】:

  • 在 SubdivisionModifier 代码中,它使用顶点和边权重来定位新的细分顶点。我没有时间深入研究正在发生的事情的数学,但是如果您可以修改/替换定位逻辑以沿原始边缘放置新顶点,那么您的几何图形应该保持其形状,同时仍被细分为更多面.
  • @TheJim01 谢谢,我一直在修改这些值,我想我已经接近解决方案了。如果我找到可靠的解决方案,将发布答案。

标签: javascript three.js geometry


【解决方案1】:

根据 TheJim01 的 cmets 中的建议,我能够挖掘原始源并修改顶点权重、边权重和 beta 值以保留原始形状。我的修改应该移除任何平均,并将所有权重放在源形状上。

必须修改三个部分,因此我继续将其设置为一个选项,可以将其传递给名为 retainShape 的构造函数,默认为 false。

我对 SubdivisionGeometry.js 的修改代码做了一个要点。

View the modified SubdivisionGeometry.js Gist


下面是一个在选项关闭和打开的情况下细分立方体的示例。

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

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

如果有人对此有任何问题或有任何疑问,请告诉我!

【讨论】:

  • 这真的很酷。您应该将更改提交给THREE.SubdivisionModifier! :) github.com/mrdoob/three.js
  • 太棒了!将尝试尽快提交,THREE.BufferSubdivisionModifier 也是如此。
  • 如果它在语义方面有任何使用,在 Blender 中有一个选项可以在简单模式下使用细分修饰符来避免形状变形,也许你可以简单地命名你的属性,因为它可能是有原因的那
【解决方案2】:

当前版本的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);

https://threejs.org/docs/#api/en/geometries/PlaneGeometry

【讨论】:

  • 这是真的,但请参阅我问题末尾的注释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
  • 2021-09-05
  • 1970-01-01
  • 2012-12-19
  • 2019-06-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多