我在 GLKit 中有一个跟随用户手指的纹理。我计算弧度以在两点之间使用 arctan 绘制角度。
这里的部分技巧是保持物体居中而不是手指。所以我引入了锚点的概念,以便可以相对于它们的原点或中心绘制事物。我的目标是将精灵移动到位然后旋转。我的渲染器中有以下代码。
// 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 和它嵌入的视图。