Я создал этот кубик Рубикса с Papervison3D.С некоторыми ресурсами я создал куб с 27 миникубами внутри (3 * 3 * 3 = 27).Вращение кубика Рубикса при движении мыши уже сделано.(Я не вращаю камеру.)
Все поведение кубика Рубика уже там.Но я немного застрял на последнем этапе.
Когда я играю с ним, как если бы я играл с обычным кубиком Рубикса, он работает нормально, кроме того, я знаю, что значения вращения Эйлера по умолчанию больше не являются надежнымиспустя некоторое время.Что мне нужно, так это повернуть кубик Рубика в выбранную сторону, а после этого повернуть кубик Рубика по оси z, чтобы поверхность мини-куба была направлена вверх.Я предпочитаю анимировать его с помощью TweenMax, но я действительно застрял, потому что мне нужны кватернионные вращения.
Я знаю выбранное лицо самого кубика Рубика.Я знаю вращение Эйлера кубика Рубика с помощью Matrix3D.matrix2euler(_rubiksCube.transform);
. Мне нужно повернуть его на выбранную грань, например, когда текущее вращение x: -20, y: 35, z: 10
, и я выбираю заднюю грань куба Рубика, он должен повернуться на x:0, y: 180, z: 0
,
Мне нужно изменить это значение на кватернион и повернуть кубик Рубикса на новое значение кватерниона.После этого он должен повернуть кубик Рубика по оси z, чтобы он был направлен к выбранному мини-кубу вверх.
Этот код я использую при перетаскивании / вращении кубика Рубика
private function onMouseMove( e : MouseEvent) : void {
var m : Matrix3D;
m = Matrix3D.rotationY( (mouseX - _mouseDownPoint.x) / 120 );
m = Matrix3D.multiply( m, Matrix3D.rotationX( -(mouseY - _mouseDownPoint.y) / 120 ));
_rubiksCube.transform = Matrix3D.multiply( m, _rubiksCube.transform );
_mouseDownPoint.x = mouseX;
_mouseDownPoint.y = mouseY;
}