Повторение математической случайной величины без получения того же результата в three.js

#random #three.js

#Случайный #three.js

Вопрос:

Может быть, вопрос новичка, но я хотел бы использовать случайную переменную несколько раз в своем коде, но, конечно, она напоминает то же самое для всех параметров, использующих ее. Как я мог это исправить?

Пример :

 var randomColor = [yellow, blue, green][Math.floor(Math.random() * 3)]

const cube1 = new THREE.Mesh(geometry, randomColor);
scene.add(cube1);

const cube2 = new THREE.Mesh(geometry, randomColor);
scene.add(cube2);
 

Эти два куба будут иметь одинаковый материал (с именем RandomColor), даже если он случайный.
Заранее благодарю вас!

Комментарии:

1. Создайте randomColor функцию, чтобы она возвращала случайный цвет при вызове. var randomColor = function(){ return [yellow, blue, green][Math.floor(Math.random() * 3)] }

Ответ №1:

Вместо того, чтобы каждый раз использовать один и тот же случайный цвет, вы создаете новый, вызывая getRandomColor() его, как только он вам понадобится.

 const colors = ['yellow', 'blue', 'green']
function getRandomColor() {
  const index = Math.floor(Math.random() * colors.length)
  return colors[index]
}

const cube1 = new THREE.Mesh(geometry, getRandomColor());
scene.add(cube1);

const cube2 = new THREE.Mesh(geometry, getRandomColor());
scene.add(cube2);
 

Ответ №2:

Вот решение, с которым предыдущие ответы не работают three.js :/ :

 let colors = ['0xff0000','0xf7c252','0xa0bbd0']

    const colour = new THREE.Color();
    colour.setHex(colors[Math.floor(Math.random() * colors.length)]);
    
    fond = new THREE.MeshToonMaterial({ color: colour });
    
    const cube1 = new THREE.Mesh(geometry, fond);
    scene.add(cube1);

    const cube2 = new THREE.Mesh(geometry, fond);
    scene.add(cube2);