У меня есть текстура, которая следует за пальцем пользователя в GLKit.Я вычисляю радиан, чтобы нарисовать угол при использовании арктана между двумя точками.
Часть хитрости здесь заключается в том, чтобы держать объект в центре недоедающего пальца.Поэтому я ввел идею узловой точки, так что все может быть обращено относительно их происхождения или центра.Моя цель - переместить спрайт на место, а затем вращать.В моем рендерере есть следующий код:
// lets adjust for our location based on our anchor point.
GLKVector2 adjustment = GLKVector2Make(self.spriteSize.width * self.anchorPoint.x,
self.spriteSize.height * self.anchorPoint.y);
GLKVector2 adjustedPosition = GLKVector2Subtract(self.position, adjustment);
GLKMatrix4 modelMatrix = GLKMatrix4Multiply(GLKMatrix4MakeTranslation(adjustedPosition.x, adjustedPosition.y, 1.0), GLKMatrix4MakeScale(adjustedScale.x, adjustedScale.y, 1));
modelMatrix = GLKMatrix4Rotate(modelMatrix, self.rotation, 0, 0, 1);
effect.transform.modelviewMatrix = modelMatrix;
effect.transform.projectionMatrix = scene.projection;
Еще одно замечание: мой спрайт находится на псевдониме текстуры.Если я уберу свое вращение, мой спрайт будет правильно отцентрирован под моим пальцем.Моя матрица проекта - GLKMatrix4MakeOrtho (0, CGRectGetWidth (self.frame), CGRectGetHeight (self.frame), 0, 1, -1);поэтому он совпадает с UIkit и представлением, в которое он встроен.