如何定义要应用于面部的纹理区域

How to define the area of the texture to apply to a face

我有一个用 Three.JS 制作的立方体,我想在每个面上应用纹理的一部分。 具体来说,我正在寻找一个带有 4 个参数的函数:x1y1x2y2 指定要应用于面部的纹理区域。
例如,输入 [1, 0, 15, 16](对于 16x16 的纹理),我想要右侧的面部纹理(左侧是我的控制立方体,[0, 16, 0, 16]

如果我指定 [16, 0, 0, 16]`,我的纹理是翻转的。
我想我必须用 UV 来做(因为它是相对于纹理而不是立方体本身)但是目前,我无法获得令人满意的结果。

我也希望每一张脸都是独立的。所以如果我修改了其中一个的贴图UV,其他的贴图UV并没有被修改(即使贴图是一样的)。

这是我的多维数据集的最小版本(清除了我所有的测试和其他与我的问题无关的东西): https://jsfiddle.net/theogiraudet/djcnrte0/

感谢您的回答!

纹理坐标从左下角到右上角从 0,0 到 1,1。 the discover three.js website

上提供了有关纹理映射的更详细说明

在这里做了一个演示:
https://codepen.io/cdeep/pen/XWaXGYg?editors=0011

立方体有 6 个面,4 个顶点,每个顶点有 2 个坐标。 uv属性是一个大小为48的BufferAttribute,可以通过更新来控制每个顶点贴图对应的部分。

geometry.attributes.uv.copyArray(<Array of size 48>);
geometry.attributes.uv.needsUpdate = true;

在 codepen 中,我重复了数组以对每个面应用相同的纹理。