Javascript 三个js几何体UV未映射

Javascript 三个js几何体UV未映射,javascript,graphics,three.js,Javascript,Graphics,Three.js,我只是尝试将加载的纹理应用到网格上,并在加载网格后为每个面使用不同的UV坐标。我相信我已经采取了所有必要的步骤,但我没有得到预期的结果 首先,我指定纹理坐标: top_texture_uv = [new THREE.Vector2(0,0), new THREE.Vector2(8,0), new THREE.Vector2(8,8), new THREE.Vector2(0,8)]; side_texture_uv = [new THREE.Vector2(0,0), new THREE.Ve

我只是尝试将加载的纹理应用到网格上,并在加载网格后为每个面使用不同的UV坐标。我相信我已经采取了所有必要的步骤,但我没有得到预期的结果

首先,我指定纹理坐标:

top_texture_uv = [new THREE.Vector2(0,0), new THREE.Vector2(8,0), new THREE.Vector2(8,8), new THREE.Vector2(0,8)];
side_texture_uv = [new THREE.Vector2(0,0), new THREE.Vector2(4,0), new THREE.Vector2(4,2), new THREE.Vector2(0,2)];
我希望这些脸重复不同的时间

然后加载纹理并更新几何体的面顶点,如指定的文档所示:

var txLoader = new THREE.TextureLoader();
  txLoader.load(
    'textures/checker.gif',
    function ( texture ) {
      ground_segment.mesh.material.map = texture;
  //texture.wrapS = texture.wrapT = THREE.RepeatWrapping;
  ground_segment.mesh.geometry.faceVertexUvs[0] = [];

  ground_segment.mesh.geometry.faceVertexUvs[0][0] = [top_texture_uv[0], top_texture_uv[1], top_texture_uv[3]];
  ground_segment.mesh.geometry.faceVertexUvs[0][1] = [top_texture_uv[1], top_texture_uv[2], top_texture_uv[3]];

  ground_segment.mesh.geometry.faceVertexUvs[0][2] = [top_texture_uv[0], top_texture_uv[1], top_texture_uv[3]];
  ground_segment.mesh.geometry.faceVertexUvs[0][3] = [top_texture_uv[1], top_texture_uv[2], top_texture_uv[3]];

  ground_segment.mesh.geometry.faceVertexUvs[0][4] = [top_texture_uv[0], top_texture_uv[1], top_texture_uv[3]];
  ground_segment.mesh.geometry.faceVertexUvs[0][5] = [top_texture_uv[1], top_texture_uv[2], top_texture_uv[3]];

  ground_segment.mesh.geometry.faceVertexUvs[0][6] = [top_texture_uv[0], top_texture_uv[1], top_texture_uv[3]];
  ground_segment.mesh.geometry.faceVertexUvs[0][7] = [top_texture_uv[1], top_texture_uv[2], top_texture_uv[3]];

  ground_segment.mesh.geometry.faceVertexUvs[0][8] = [top_texture_uv[0], top_texture_uv[1], top_texture_uv[3]];
  ground_segment.mesh.geometry.faceVertexUvs[0][9] = [top_texture_uv[1], top_texture_uv[2], top_texture_uv[3]];

  ground_segment.mesh.geometry.faceVertexUvs[0][10] = [top_texture_uv[0], top_texture_uv[1], top_texture_uv[3]];
  ground_segment.mesh.geometry.faceVertexUvs[0][11] = [top_texture_uv[1], top_texture_uv[2], top_texture_uv[3]];


  ground_segment.mesh.geometry.uvsNeedUpdate = true;
  ground_segment.mesh.material.needsUpdate = true;
    }
  );
映射面顶点似乎没有效果


这样做不起作用,因为它只是获取加载的纹理并映射它,而不会在对象的每个面上重复,这不是我想要做的。如何使几何体反映所需的UV坐标更改?

您正在使用
THREE.geometry
,并希望在几何体渲染后更新UV

不要像这样重新分配数组:

mesh.geometry.faceVertexUvs[ 0 ][ 0 ][ 0 ] = new THREE.Vector2( u, v ); // invalid
相反,请使用以下模式:

mesh.geometry.faceVertexUvs[ 0 ][ 0 ][ 0 ].copy( uv ); // or .set( u, v )

mesh.geometry.uvsNeedUpdate = true; // required only if geometry has been rendered

three.js r.84

Hm。我尝试了复制和设置选项,但仍然无法正常运行。我必须为所有的面孔更换它们吗?那么总共有12张脸?另外,在uv坐标上复制之前,我不应该清除面顶点,因为我需要那里的向量才能访问复制方法,对吗?不要重新分配任何数组;只需替换现有数组中的值。当然,可以只替换要更改的值。