Это мой второй вопрос о трехмерных кубах в iphone с использованием CALayer, Core Animation framework, написанного на Objective-c. Чтобы ответить на мой первый вопрос, посетите Задача 3D-куба! Часть 1. .
Я использую код Брэда Ларсона, чтобы повернуть свой трехмерный куб по этой ссылке
http: //www.sunsetlakesoftware.com / 2008/10/22/3-d-Rotation-without-trackball
Проблема в том, что мой куб вращается по оси x вдоль розовой линии, показанной на рисунке.
Но я хочу повернуть его вокруг 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. Если вы хотите узнать, как я создал этот куб, дайте мне знать