我试图使用Three.js渲染一个在面上有6个不同图像的立方体.
THREE.CubeGeometry的构造函数如下所示:
THREE.CubeGeometry = function ( width, height, depth, segmentsWidth, segmentsHeight, segmentsDepth, materials, sides )
Run Code Online (Sandbox Code Playgroud)
我可以从代码中看到,"材料"应该是一种材料,或者是一种由6种不同材料组成的阵列,但这里传递的材料在渲染时似乎永远不会被使用.
相反,给予Mesh构造函数的单个材质用于所有6个面.
var face_materials = ... <load 6 textures here>...
var cube_g = new THREE.CubeGeometry(400,400,400,1,1,1, face_materials); // <= ignored?
var cube = new THREE.Mesh(cube_g, some_material); // <= this is used instead
Run Code Online (Sandbox Code Playgroud)
即使我将null或undefined作为"some_material"传递,它似乎会覆盖face_materials并且不呈现任何内容.
有没有办法使用CubeGeometry来完成这项工作?或者我是否必须单独创建6个面并将它们添加到场景中?
Ilm*_*nen 19
您需要使用THREE.MeshFaceMaterial作为网格.这是示例代码:
var materials = [];
for (var i=0; i<6; i++) {
var img = new Image();
img.src = i + '.png';
var tex = new THREE.Texture(img);
img.tex = tex;
img.onload = function() {
this.tex.needsUpdate = true;
};
var mat = new THREE.MeshBasicMaterial({color: 0xffffff, map: tex});
materials.push(mat);
}
var cubeGeo = new THREE.CubeGeometry(400,400,400,1,1,1, materials);
var cube = new THREE.Mesh(cubeGeo, new THREE.MeshFaceMaterial());
Run Code Online (Sandbox Code Playgroud)