Я использую wikitude, и мне нужно получить координаты экрана распознанного маркера. Я преобразовал проекциюViewMatrix в GLKMatrix4 и попробовал этот код, который нашел на нескольких сайтах:
let point = Point3D(x: m.m.12, y: m.m.13, z: m.m.14)//m is the matrix
let x = round(((CGFloat(point.x)+1)/2)*self.view.frame.width)
let y = round(((1-CGFloat(point.y))/2)*self.view.frame.height)
Дело в том, что если я центрирую маркер, чем вид, я двигаюсь с вычисленными координатами, тоже центрируется, и когда я перемещаю маркер, вид перемещается в правильном направлении, но он движется «слишком быстро», поэтому он не остается на маркере, но выходит за пределы экрана в том направлении, в котором я перемещал маркер.
Редактировать: Это код, который я использую для преобразования указателя, который предоставляет нам Wikitude, в GLKMatrix4:
-(instancetype)initWithCArray:(const float *)pointer{
self = [super init];
if(self != nil){
glkMatrix = GLKMatrix4Identity;
memcpy(glkMatrix.m, pointer, 16*sizeof(float));
}
return self;
}