2016-03-24 30 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