(3D) держать объекты выровненными во время масштабирования - PullRequest
1 голос
/ 22 апреля 2020

Я делаю создателя 3D-монстров, я добавил способ комбинирования деталей и проработал все изгибы, кроме масштабирования. Я объединяю modelInstances, просто устанавливая флаг, добавляя их во вложенные массивы и имея операторы if, которые включают циклы всякий раз, когда пользователь изменяет объединенный экземпляр. При масштабировании объекты остаются неподвижными, но когда я в группе, мне нужно, чтобы они переместились на определенную величину, чтобы сохранить согласованность формы.

В настоящее время это мой метод масштабирования:

switch (modelInstance[i].currentFlip) {
            case 0:
                modelInstance[i].scale.add(0.01f);
                break;
            case 1:
                modelInstance[i].scale.add(-0.01f, 0.01f, 0.01f);
                break;
            case 2:
                modelInstance[i].scale.add(-0.01f, -0.01f, 0.01f);
                break;
            case 3:
                modelInstance[i].scale.add(0.01f, -0.01f, 0.01f);
                break;
        }
        modelInstance[i].transform.set(modelInstance[i].basePosition, modelInstance[i].baseRotation, modelInstance[i].scale);

Чтобы пояснить, вот видео о том, что происходит: https://youtu.be/kLjlcMVKAR0 Я хочу, чтобы форма комбинированного объекта оставайтесь последовательными, несмотря на его размер, и это должно быть сделано путем изменения положения отдельного объекта. Я знаю положение отдельного объекта, положение комбинированного объекта, текущий масштаб объекта и ограничительную рамку отдельного объекта для точных измерений i sh.

1 Ответ

0 голосов
/ 23 апреля 2020

Я осознал, что для того, чтобы сохранить согласованную форму при изменении масштаба отдельного объекта, я должен масштабировать разницу в положении от центра масс до отдельного объекта.

modelInstance[i].basePosition.set(centreMass.cpy().add(modelInstance[i].distanceFromCentreMass.cpy().scl(modelInstance[i].scale)));
...