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