Kaaboeld
@Kaaboeld
Web-разработчик

Как в three.js разделить куб на произвольное количество кубов кратное 8?

Есть куб нам известны координаты его центра и его размеры(x,y,z), необходимо иметь возможность делить его произвольное количество кубов кратное 8.
Никак не придумаю цикл для данной операции на данный момент есть простая функция для деления "первого уровня"(половина размера по каждой из координат + смещение):
function setCubePartPosition(shift,geometry,material){
    var cubes = [];

    for(var i=0; i < 8; i++){
        var cube = new THREE.Mesh(geometry, material);
        var x = y = z = 0;
        
        switch(i){
            case 0:
                x = shift;
                y = shift;
                z = shift;
            break;
            case 1:
                x = -shift;
                y = shift;
                z = shift;
            break;
            case 2:
                x = shift;
                y = -shift;
                z = shift;
            break;
            case 3:
                x = shift;
                y = shift;
                z = -shift;
            break;
            case 4:
                x = -shift;
                y = -shift;
                z = shift;
            break;
            case 5:
                x = -shift;
                y = -shift;
                z = -shift;
            break;
            case 6:
                x = -shift;
                y = shift;
                z = -shift;
            break;
            case 7:
                x = shift;
                y = -shift;
                z = -shift;
            break;
            
        }
        cube.position.set(x,y,z);
        cubes.push(cube);
    }
    return cubes;
}

В результате у нас получается куб состоящий из 8 кубов. Эту функцию, как я понимаю, необходимо будет как-то использовать в цикле, чтобы при делении на большее количество частей происходило не создания куба, а смещение центра где будут создавать другие 8 кубов и так далее.
Есть идеи? Сам искать пробовал, но видимо не удается правильно сформулировать запрос для подобной задачи. Так же не подойдет решение с одним кубом и множеством фэйсов, так как нужны отдельные мешы.
По возможно хотелось бы чтобы они строились упорядочено, например снизу вверх.
  • Вопрос задан
  • 2620 просмотров
Пригласить эксперта
Ответы на вопрос 1
qfox
@qfox
Ответы есть у меня
Если на входе: координаты, кол-во кубов (через коэффициент или число, кратное 8) и размеры, geometry, material.
То: мне видится цикл вложенности 3, который можно будет оптимизировать, и который будет считать координаты для кубов для каждой размерности, ну и запускать там вашу функцию (только слегка модифицированную, ибо x, y, z не должны быть 0).

Сделайте расчет координат отдельно, выведите их, проверьте что все правильно, и после подставьте туда отрисовку в нужных координатах вашего куба. Самое простое — это разделить задачу на несколько простых и после использовать их в правильном порядке.
Простите, без кода ;-)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы