我需要根据唯一的对象大小重复纹理

时间:2018-09-25 18:07:33

标签: javascript three.js

让我解释一下。

我需要处理多个纹理,我知道该怎么做,或者在处理时使用哪种方法。

解决方案是在几何图形上进行UV贴图以重复纹理。

问题是我不知道该怎么做,而THREE.js中有关UV映射的文档对我来说非常复杂。

比方说,我有三个具有相同纹理的不同对象。这些是尺寸:

(1,1,1)-我需要这个来拥有2x2的UV网格物体。 AKA 4在每张脸上重复。 (1,2,1)-我需要这个在侧面而不是顶部或底部具有2x4 UV网格。 (3,1,3)-我需要在顶部和底部(而不是侧面)上具有6x6的UV网格。

我该如何不加载纹理的3个不同克隆,并在每个特定的几何体上使用UV贴图根据其各自的大小重复纹理?

编辑:我已经设置了boxbuffergeometry的片段,但是纹理不会基于uvs重复。现在这是一个非常烦人的问题。我需要在几何图形中设置纹理重复/段/ uvs。

1 个答案:

答案 0 :(得分:2)

假设您使用某种BufferGeometry,可以按如下所示缩放UV。将UV缩放2倍会使纹理平铺两次。

var uvs = mesh.geometry.attributes.uv;

for ( var i = 0; i < uvs.count; i++ ) {

  uvs.setXY( i, uvs.getX( i ) * 2, uvs.getY( i ) * 2 );

}

完成此操作后,即使纹理重复不同的次数,也可以安全地合并共享材料的几何形状。

请参见https://threejs.org/docs/#api/en/core/BufferAttribute,从three.js r96开始。