Задача 3D Cube, часть 2 - PullRequest
       16

Задача 3D Cube, часть 2

6 голосов
/ 08 июня 2011

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

Я использую код Брэда Ларсона для вращения моего 3D-куба по этой ссылке

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

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

enter image description here

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

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

- (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.Если вы хотите узнать, как я создал этот куб, дайте мне знать

Ответы [ 2 ]

3 голосов
/ 26 ноября 2012

Похоже, вам нужно сначала перевести слои перед их вращением.

Вместо того, чтобы выбирать точку поворота / привязки, вы можете сначала использовать CATransform3DTranslate, чтобы перевести слои от их естественного происхождения, и использовать CATransform3DRotate послечто.

Это поможет взглянуть на то, как вы строите свой куб, чтобы точно определить, как он может быть реализован.

3 голосов
/ 08 июня 2011

Установить andchorPoint к центру; если иметь дело с CALayer, то ...

[myLayer setAnchorPoint:CGPointMake(0.5, 0.5)];
...