Координаты текстуры должны быть добавлены для каждой грани к 1-му слою УФ-слоя.
См. THREE.Geometry.faceVertexUvs
Создание и массив в УФ-слое:
geo.faceVertexUvs[0] = [];
И добавьте массив из 3 THREE.Vector2
для каждой грани треугольника:
geo.faceVertexUvs[0].push([
new THREE.Vector2(u0, v1),
new THREE.Vector2(u1, v1),
new THREE.Vector2(u2, v2)
]);
Примените это к своему коду следующим образом:
var geo = new THREE.Geometry();
var i;
var uv = [];
for (i = 0; i < s; i++) {
for (var j = 0; j < s; j++) {
geo.vertices.push(new THREE.Vector3(i/div, heightMap[i][j], j/div));
uv.push(new THREE.Vector2((i-1)/s, (j-1)/s));
}
}
geo.faceVertexUvs[0] = [];
for (i = 0; i < (s)*(s-1); i++) {
if (!Number.isInteger((i+1)/s)){
var vi = [i, i+1, i+s+1, i+s];
geo.faces.push(new THREE.Face3(vi[0], vi[1], vi[2]));
geo.faces.push(new THREE.Face3(vi[0], vi[2], vi[3]));
geo.faceVertexUvs[0].push([ uv[vi[0]], uv[vi[1]], uv[vi[2]] ]);
geo.faceVertexUvs[0].push([ uv[vi[0]], uv[vi[2]], uv[vi[3]] ]);
}
}
geo.computeVertexNormals();
geo.computeFaceNormals();