0
我正在嘗試製作地形編輯器。所以,我有與它多種材料,這是我初始化像這樣一個平面:Three.js - 更新飛機上的紋理
var materials = [];
var grasstexture = THREE.ImageUtils.loadTexture('Img/grass.png', {}, function() { });
var rocktexture = THREE.ImageUtils.loadTexture('Img/rock.png', {}, function() { });
materials.push(new THREE.MeshPhongMaterial({color: 0xffffff, map: grasstexture}));
materials.push(new THREE.MeshPhongMaterial({color: 0xffffff, map: rocktexture}));
// Plane
this.geometry.materials = materials;
for(var i = 0; i < this.geometry.faces.length; i++)
{
this.geometry.faces[i].materialIndex = 0;
}
this.geometry.dynamic = true;
this.mesh = new THREE.Mesh(this.geometry, new THREE.MeshFaceMaterial());
this.mesh.receiveShadow = true;
結果是與兩個紋理剝離方形的平面。
現在,我似乎無法在運行時更新每個頂點的materialIndex。我曾嘗試:
face.materialIndex = 1;
for(var i = 0; i < geo.materials.length; i++){
geo.materials[i].needsUpdate = true;
}
for(var i = 0; i < this.geometry.faces.length; i++)
{
geo.faces[i].materialIndex = 0;
}
for(var i = 0; i < geo.materials.length; i++){
geo.materials[i].needsUpdate = true;
}
this.mesh.needsUpdate = true;
this.mesh.material.needsUpdate = true;
geo.verticesNeedUpdate = true;
geo.normalsNeedUpdate = true;
geo.colorsNeedUpdate = true;
geo.computeFaceNormals();
geo.computeVertexNormals();
geo.computeCentroids();
geo.computeTangents() ;
和所有其他「materialIndex」和「needsUpdate」在three.js所變我能找到,但還是沒有任何反應。我如何強制更新材料索引?
問題是,給每個經過它面對自己的紋理,你能想象它是多麼緩慢呈現500×頂點地形:S是有更好的方法來改變應用到每個頂點紋理?理想情況下,紋理之間也可以進行平滑融合。 –