2016-02-17 147 views
0

在2d对象的中心/右侧/左侧显示贴图的最简单方法是什么?Three.js - 在对象的一部分上显示纹理贴图

我试图玩偏移和重复的纹理,但没有运气,我无法找到答案的任何地方。

另外,我已经试过这样:

 someButton.onClick(function() { 

      var geom = editor.selected.geometry; 
      var uvs = geom.faceVertexUvs[0]; 

      var face0 = uvs[0]; 
      face0[0] = new THREE.Vector2(0,1); 
      face0[1] = new THREE.Vector2(0,0.2); 
      face0[2] = new THREE.Vector2(0.5,1); 

      var face1 = uvs[1]; 
      face1[0] = new THREE.Vector2(0,0.2); 
      face1[1] = new THREE.Vector2(0.5,0.2); 
      face1[2] = new THREE.Vector2(0.5,1); 

      geom.uvsNeedUpdate = true; 

    }); 

再次,没有运气。

例如,如果对象是一个二维正方形,我想居中无尾熊图象,其需要是这样的:

koala bear on center of square

我想要动态地改变纹理的位置 由于事先

+1

你能显示你的一些代码尝试? – AndrewPolland

+0

当然编辑过。 – RoeePeleg

+0

尝试'face0 [0] .set(u,v);'不要实例化一个新实例。 – WestLangley

回答

0

我终于有一个很好的解决方案上来,看看是否有帮助:

someButton.onClick(function() { 

    var obj = editor.selected; 
    var width = obj.geometry.parameters.width; 
    var height = obj.geometry.parameters.height; 
    var geometry = new THREE.PlaneGeometry(width,height, 3, 3); 
    var material = obj.material; 

    material.map.wrapS = material.map.wrapT = THREE.RepeatWrapping; 
    material.map.repeat.x = material.map.repeat.y = 3; 

    var materials = []; 
    materials.push(material); 
    materials.push(new THREE.MeshBasicMaterial({})); 

    for (var i = 0; i < 18; i++) { 
     if (i == 8 || i == 9) geomtery.faces[i].materialIndex = 0; 
     else geomtery.faces[i].materialIndex = 1; 
    } 

    obj.geomtery = geomtery; 
    obj.material = new THREE.MeshFaceMaterial(materials); 
    editor.signals.materialChanged.dispatch(obj); 

});