Мир для отображения координат

Я использую 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;
}

person kemkriszt    schedule 11.01.2017    source источник
comment
Пожалуйста, опубликуйте еще немного кода (создание m) и дополнительную информацию о том, чего вы хотите достичь (какой маркер; сенсорное событие?).   -  person shallowThought    schedule 12.01.2017
comment
У меня есть класс, который обрабатывает матрицу. В методе init он принимает UnsafePointer‹Float›, а затем имеет метод getMatrix(), который возвращает GLKMatrix4. Я не знаю, где я его нашел, потому что это было около года назад. Я уже успешно использовал этот класс в нескольких проектах OpenGL/metal и wikitude. Маркер — это простое изображение, которое распознает Wikitude. Я хотел бы, чтобы вид следовал за моим маркером на экране, но на этот раз я не могу использовать OpenGL/металл, потому что вид должен позже интегрироваться с моим пользовательским интерфейсом. (Анимация и преобразование в окно, содержащее элементы ios ui) Нет сенсорных событий.   -  person kemkriszt    schedule 12.01.2017
comment
Хорошо, я только что добрался до своего компьютера. Добавлен код, который преобразует этот указатель, который предоставляет нам Wikitude, в GLKMatrix4.   -  person kemkriszt    schedule 12.01.2017


Ответы (1)


Без тестирования я не понимаю, почему вы хотите округлить и подозреваете, что это корень проблемы. Убираем округление:

let x = CGFloat(((point.x + 1.0) / 2.0)) * self.view.frame.width
let y = CGFloat(((1.0 - point.y) / 2.0)) * self.view.frame.height

Кроме того, я думаю, что y следует обрабатывать как x(...point.y + 1.0), но, поскольку вы говорите, что направление правильное, я, вероятно, ошибаюсь.

person shallowThought    schedule 12.01.2017
comment
Ну, я не знаю, что происходит .. Я не знаю, что я изменил, но теперь с округлением или без него оси поменялись местами (если я двигаю его вверх-вниз, он перемещается вправо-влево и наоборот ).. - person kemkriszt; 12.01.2017