很难找到这个问题的最新答案。好像许多解决方案正在使用MeshFaceMaterial
,这些解决方案早已从three.js(大约53版,目前在84版)中消失了。
从我已经完成的研究来看,创建一个Box,将其变成一个Sphere然后进行映射似乎是一个更好的策略。
以下是我所拥有的:
我在vars t1
和t2
var geometry = new THREE.BoxGeometry(1,1,1);
for (var i in geometry.vertices) {
var vertex = geometry.vertices[i];
vertex.normalize().multiplyScalar(1);
}
var mat1 = new THREE.MeshLambertMaterial({ map: t1 });
var mat2 = new THREE.MeshLambertMaterial({ map: t2 });
var materials = [mat1, mat2];
var mats = new THREE.MultiMaterial(materials);
var cube = new THREE.Mesh(geometry, mats);
scene.add(cube);
问题:
Uncaught TypeError: Cannot read property 'visible' of undefined
任何提示都将非常感谢!
答案 0 :(得分:0)
查看几何体面内的materialIndex
值。这些值是materials
数组的索引。
在您的示例中,您会看到他们的值从0
到5
(对应于框的两侧),但由于只提供了两种材料,因此您会看到错误。
要解决您的问题,您只需更改几何面上的materialIndex
值,以便它们仅引用您的两种材质。
例如:
for (var i = 0; i < geometry.faces.length; i += 1) {
var face = geometry.faces[i];
face.materialIndex = face.materialIndex % 2;
}