繁体   English   中英

三.js 网格调整大小

[英]Three.js mesh resize

我有一个 3D 模型,它作为 obj 文件加载到Three.js 中 模型本身就是一件家具。

在此处输入图片说明

问题是,家具材料是动态的,大小(厚度)不同。 我需要能够使材料的厚度更大,但模型的总尺寸不能改变。 所以缩放不是一种选择。

有没有一种方法可以调整模型的某些部分(很少有特定的网格)并且不损害网格本身的结构? 我需要改变结构的厚度,但模型的内部部分不应该改变。

我能想到的唯一解决方案是更改某些网格的比例,然后基于此更改其他网格的全局位置。 这是正确的方法吗?

object.traverse(function(child) {
    if (child instanceof THREE.Mesh) {
        // resize and reposition some of the meshes
    }
});

可能的解决方法:

  1. 骨头
  2. 变形

好吧,如果所有网格都是单独的图元,那么您只需更改要沿一个轴更改的每个部分的比例,然后设置锚点以约束到外部。 因此,对于边界上的部分,您可以缩放它们所连接的空对象,以便它们保持外壳。

EG:

 OOOOOO
OMMMMMMO
OMmmmmMO
OMmmmmMO
OMMMMMMO
 OOOOOO

其中 O 是一个携带相邻 Mesh-M 的 Object3D,m 代表自身缩放的网格。 这样,如果您调整所有“m”和“O”的比例,外壳会保持原位,

但是你在遍历的正确轨道上。 你只需要这样做。 为了一种简单的遍历方法,我会提供您想要更改其 .userData 对象中的某些属性的所有内容。 因为在某些情况下,您需要缩放空对象 (O)(以便您可以有效地移动锚点),而在其他情况下,您需要将网格缩放到位 (m)。 所以它不是纯粹的基于网格的操作(因为网格想要从它们的中心缩放)。 做一些标记使遍历更简单:

object.traverse(function(child){
    if(child instanceof THREE.Mesh){
        if(child.userData.isScalable){
            //do the scaling.
        }
    }
});

如果您正确设置了层次结构和 .userData 标记,那么您只需缩放事物并保留外壳。

这是你要问的吗? 因为问题不清楚。

您可以使用 Clara.io,它建立在 ThreeJS 之上,允许您在您在 Clara.io 场景中设置的几何图形上运行运算符。 您可以使用 Clara.io 中的厚度运算符。

文档在这里: http : //clara.io/learn/sdk/interactive-experiences

您可以在 Clara.io 编辑器中执行的任何操作,您都可以在交互式嵌入中执行。

您可以使用更改不同网格大小和其他位置的方法,但是当您使用object.scale.set( x, y, z ); 浏览器必须为渲染的每一帧更改模型的比例。 因此,如果您将其用于大量网格,它会降低您的游戏性能。 最好的方法是使用像 Blender 这样的 3d 编辑器。 它更容易,更有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM