Проблема с 3D-кубом, часть 2

Это мой второй вопрос о трехмерных кубах в iphone с использованием CALayer, Core Animation framework, написанного на Objective-c. Чтобы ответить на мой первый вопрос, посетите Задача 3D-куба! Часть 1. .

Я использую код Брэда Ларсона, чтобы повернуть свой трехмерный куб по этой ссылке

http: //www.sunsetlakesoftware.com / 2008/10/22/3-d-Rotation-without-trackball

Проблема в том, что мой куб вращается по оси x вдоль розовой линии, показанной на рисунке.

enter image description here

Но я хочу повернуть его вокруг x ось вдоль черной линии, показанной на рисунке.
Теперь в моем коде у меня нет ни розовой, ни черной линии, нарисованной на моем поле зрения, так что кто-нибудь может мне помочь с этим.

Если это поможет, вот код для поворота моего куба в touchesMoved: method

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{
    CGPoint location = [[touches anyObject] locationInView:self];
    CATransform3D currentTransform = currentLayer.sublayerTransform;
    CGFloat displacementInX = location.x - previousLocation.x;
    CGFloat displacementInY = previousLocation.y - location.y;
    CGFloat totalRotation = sqrt(displacementInX * displacementInX + displacementInY * displacementInY);
    CGFloat x = (displacementInX/totalRotation) * currentTransform.m12 + (displacementInY/totalRotation) * currentTransform.m11;
    CATransform3D rotationalTransform = CATransform3DRotate(currentTransform, totalRotation * M_PI / 180.0, x, y, 0);
    currentLayer.sublayerTransform = rotationalTransform;
}

previousLocation - это CGPoint , инициализированный в touchesBegan: метод, а currentLayer - это CALayer , где я создал этот куб.

Спасибо за вашу помощь .

PS. Если вы хотите узнать, как я создал этот куб, дайте мне знать

6
задан Community 23 May 2017 в 11:45
поделиться