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是有更好的方法来改变应用到每个顶点纹理?理想情况下,纹理之间也可以进行平滑融合。 –