지형 편집기를 만들려고합니다.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() ;
그리고 Three.js를에서 'needsUpdate'변수 내가 찾을 수 만, 여전히 아무 일도 발생하지 않습니다 다른 모든 'MaterialIndex에'합니다. 물질적 지표를 어떻게 업데이트합니까?
문제는 각각 고유의 질감에 직면주고 나서, 당신은 그것이 500x500 정점 지형을 렌더링하는 것이 얼마나 느린 상상할 수 있다는 것입니다 : S 각 정점에 적용되는 텍스처를 변경할 수있는 더 나은 방법이 있나요? 이상적으로는 텍스처 간의 부드러운 블렌딩도있을 것입니다. –