Three.js: Добавление и удаление дочерних объектов повернутых объектов

пытаюсь смоделировать рубикс куб. Я хотел выбрать лицо наугад и повернуть его. Так что я'Мы создали 27 кубических сеток и разместили их. Вы можете увидеть рабочий (хаотично) рубикс кубом здесьhttp://codepen.io/theonepa1/full/fzAli

В чем проблема.

Как видно из приведенной выше ссылки, более мелкие кубики по краям движутся случайным образом (по крайней мере, не так, как я ожидаю)

Что я'мы сделали.

При попытке повернуть лицо, ясгруппированные 9 кубов, принадлежащих лицу, добавили их в качестве дочерних к новому объекту Object3D. Затем я повернул object3d вдоль своей оси, используя object3d.rotate.x (или y или z).

Что я'я отлажен

мы убедились, что кубики ям выбора второго поворота лица правильны. После того, как первый поворот лица завершен, я обновляю их виртуальные позиции (не фактические координаты). Так что для второго вращения лица яУбедитесь, что кубы выбраны правильно.

Что на самом деле происходит

Одно наблюдение я сделал, что кубики (меньшие) оси изменяются после поворота object3d (родительский элемент, содержащий 9 кубов грани). А также кубики координаты не обновляются автоматически после вращения лица. Скажем, например, если один из кубов имеет координаты (0,0,22) до вращения грани, координаты остаются такими же даже после вращения. Однако ориентация осей куба меняется.

Каков наилучший способ вращения группы объектов вокруг оси? Правильно ли использовать Object3D? Мы должны удалить детей от одного из родителей, прежде чем добавить его в другую группу для второго поворота лица?

Ясделать какие-то обновления для отдельных кубов, прежде чем добавлять их во вторую группу для поворота второй грани?

Вы читали некоторые посты о applyMatrixWorld, но я действительно не мог понять, как он влияет на ориентацию осей и координаты куба?

Можете ли вы дать мне знать, где я могу прочитать о таких понятиях, как applyMatrixWorld, это какая-то общая концепция в обычном трехмерном программировании?

Это действительно длинный вопрос. Буду очень признателен за ваш ответ :)

Ответы на вопрос(1)

Ваш ответ на вопрос