2014-04-27 23 views
6

我正在尝试将纹理应用于Box对象的仅一侧。如何创建多个Box并只更改一侧的纹理?

Basic代码:

BoxGeo = new THREE.BoxGeometry(50, 50, 125); 
BoxMat = new THREE.MeshLambertMaterial({ color: 0xF0F0F0 }); 
BoxObj = new THREE.Mesh(GeoBox, GeoMat); 

我使用含有6种材料的阵列试图对象,5个彩色和一个与图像(从纹理的另一个阵列对每个盒中随机选用)。但是,它抛出一个错误:(

是否有可能提供一个简单的立方体为例具有不同纹理每个面? 我在网上看到一些为例,但他们需要把材料阵列几何对象内部和我想,以避免由于性能原因创建每个箱子一个新的几何对象。

回答

3

什么this sample?它创建材料数组,然后将其添加到网格。所以,你可以重新使用它。

相关代码:

// Create an array of materials to be used in a cube, one for each side 
var cubeMaterialArray = []; 
// order to add materials: x+,x-,y+,y-,z+,z- 
cubeMaterialArray.push(new THREE.MeshBasicMaterial({ color: 0xff3333 })); 
cubeMaterialArray.push(new THREE.MeshBasicMaterial({ color: 0xff8800 })); 
cubeMaterialArray.push(new THREE.MeshBasicMaterial({ color: 0xffff33 })); 
cubeMaterialArray.push(new THREE.MeshBasicMaterial({ color: 0x33ff33 })); 
cubeMaterialArray.push(new THREE.MeshBasicMaterial({ color: 0x3333ff })); 
cubeMaterialArray.push(new THREE.MeshBasicMaterial({ color: 0x8833ff })); 
var cubeMaterials = new THREE.MeshFaceMaterial(cubeMaterialArray); 
// Cube parameters: width (x), height (y), depth (z), 
//  (optional) segments along x, segments along y, segments along z 
var cubeGeometry = new THREE.CubeGeometry(100, 100, 100, 1, 1, 1); 
// using THREE.MeshFaceMaterial() in the constructor below 
// causes the mesh to use the materials stored in the geometry 
cube = new THREE.Mesh(cubeGeometry, cubeMaterials); 
+0

哈哈哈!惊人!非常感谢! (我想我检查了这个网站上的所有演示除外) –

+0

@JeremyDicaire - 很高兴帮助 – acarlon