【发布时间】:2019-03-16 19:04:17
【问题描述】:
假设我在 three.js 中有一个 3DObject:
const geometry = new THREE.BoxGeometry(1, 1, 1);
const material = new THREE.MeshStandardMaterial({ color: 0xff0000 });
const mesh = new THREE.Mesh(geometry, material);
这个网格也是动态的,也就是说,用户设置它的大小,动态设置为网格的scale。
widthInput.subscribe(value => this.mesh.scale.x = +value); // just to get the idea
所以,我知道可以将单独的材质设置到几何体的不同侧面。我也知道应该可以将它设置在该几何体侧面的单独段上(如果我有更多的话)。
问题是用户可以在 200 - 260 范围内设置宽度,但我需要在网格的最右侧使用不同的材料,固定尺寸为 10。我不太确定该怎么做无需创建另一个几何图形。有什么方法可以在网格的固定部分设置材质吗?还是有什么方法可以设置分段,使其中的一个始终具有固定大小?提前谢谢你。
可视化问题(白色区域需要固定宽度为 10,而红色区域调整大小)
【问题讨论】:
-
出于好奇,您为什么回避创建新几何?如果将不同的材质应用到不同的面,无论如何都会导致更多的绘制调用和 webgl 调用发生。如果您创建两个框,您将拥有一个非常高级的用户友好界面。如果您在几何级别处理此问题,则会增加更多复杂性。您如何管理细分市场的位置?您要修改顶点并更新网格吗?这将违背您的
scale.set()界面。 -
@pailhead 你是对的,可能。我只是从整个 3d 的 javascript 世界开始,没有太多知识。我想我创建多个几何图形的问题在于太多的对象,例如当用户设置宽度时我需要更新(位置和比例)。我的意思是,我可能会创建第二个 3DObject,但和你一样......出于好奇,我想知道是否有可能实现 :)
-
在下面查看我的答案
标签: javascript three.js 3d mesh