2016-03-24 32 views
0

我试图制作一个函数,它将随机选择10个对象改变material颜色,但我不知道如何将它连接到数组或向量中。我试过把color(selector)放到一些像meshArrayX这样的数组中,但是后来,对象的位置是未定义的,并且根本不会着色任何对象。Three.js在10个随机对象上生成颜色

var mesh, scene, 
    MeshBasicMaterial = new THREE.MeshBasicMaterial({ 
     color: 0x000000, 
     opacity: 0.3, 
     transparent: true 
    }); 
var BoxGeometry = new THREE.BoxGeometry(16, 16, 16); 

function random(){ 
     var random = [0, 16, 32]; 
     var randomValue = random[Math.floor(random.length * Math.random())]; 
     console.log(randomValue); 
} 

function color(selector){ 
    for(var v=0; v<10; v++){ 
    selector.position.x = random(); 
    selector.position.y = random(); 
    selector.position.z = random(); 
    selector.material.color.setHex(0x0000ff); 
    } 
} 

var meshArrayX = []; 
for (var x=0; x<3; x++) { 
    var meshArrayY = [meshArrayX.push(mesh = new THREE.Mesh(BoxGeometry, MeshBasicMaterial))]; 
    for(var y=0; y<3; y++){ 
    var meshArrayZ = [meshArrayY.push(mesh = new THREE.Mesh(BoxGeometry, MeshBasicMaterial))]; 
    for(var z=0; z<3; z++){ 
     meshArrayZ.push(mesh = new THREE.Mesh(BoxGeometry, MeshBasicMaterial)); 
     mesh.position.x = 16*x; 
     mesh.position.y = 16*y; 
     mesh.position.z = 16*z; 
     scene.add(mesh); 


     console.log(meshArrayX.length, meshArrayY.length-1, meshArrayZ.length-1, mesh.position); 
    } 
    } 
} 
color(mesh); 
+0

你的随机()函数没有返回任何值,所以你会得到position.x/Y“未定义”/Z –

回答

2

我不知道我明白你问的是什么,但我会尽力帮助你。我想你想创建一个27盒(3x3x3)的数组,但我不明白你的代码...,你使用全局变量网格,但只添加到场景中的z循环。

我的代码FOT这个操作是:

var BoxGeometry = new THREE.BoxGeometry(5, 5, 5); 
var meshArray = []; 
for (var x=0; x<3; x++) { 
    for(var y=0; y<3; y++){ 
    for(var z=0; z<3; z++){ 
     var mesh = new THREE.Mesh(BoxGeometry, material.clone()); 
     meshArray.push(mesh); 
     mesh.position.x = 16*x; 
     mesh.position.y = 16*y; 
     mesh.position.z = 16*z; 
     scene.add(mesh); 
     console.log(meshArray.length, mesh.position); 
    } 
    } 
} 

通知“material.clone()”必须为每个网格创建材料的新实例。

而且你的色彩功能,可就是这样:

function color(selector){ 
    for(var v=0; v<10; v++){ 
    var pos= Math.floor((Math.random() * selector.length)); 

    selector[pos].material.color.setHex(0x0000ff); 
    } 
} 

所谓的:

color(meshArray); 

现在,当你调用的颜色功能,您选择从阵列10个随机箱和应用的颜色。

我希望它是有用的

+0

事实上,这就是我一直在寻找的!我刚开始学习Three.js,很难找到最新的东西。 'material.clone()'是我正在寻找的材料,使这种材料分离。非常感谢你! – nehel