【问题标题】:World to screen coordinates世界到屏幕坐标
【发布时间】:2017-05-26 13:14:01
【问题描述】:

我正在使用 wikiitude,我需要获取已识别标记的屏幕坐标。我已将 projectionViewMatrix 转换为 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)

问题是,如果我将标记比视图居中,我正在移动计算的那些坐标,也是居中的,当我移动标记时,视图会朝正确的方向移动,但它移动“太快”所以它不会停留在标记上,而是朝我移动标记的方向跑出屏幕。

编辑: 这是我用来将指针维基度提供给我们的代码转换为 GLKMatrix4:

-(instancetype)initWithCArray:(const float *)pointer{
    self = [super init];
    if(self != nil){
        glkMatrix = GLKMatrix4Identity;
        memcpy(glkMatrix.m, pointer, 16*sizeof(float));
    }
    return self;
}

【问题讨论】:

  • 请发布更多代码(创建 m)和更多关于您想要实现的 whar 的信息(什么标记;触摸事件?)。
  • 我有一个处理矩阵的类。在 init 方法中,它需要一个 UnsafePointer 并且它有一个返回 GLKMatrix4 的 getMatrix() 方法。我不知道我在哪里找到它,因为它大约在一年前。我已经成功地在 seversl OpenGL/metal 和 wikiitude 项目中使用了该类。标记只是 wikiitude 识别的简单图像。我想让视图跟随屏幕上的标记,但这次我不能使用 OpenGL/metal,因为视图必须稍后与我的 UI 集成。 (动画并转换成一个窗口,包含ios ui 元素)没有触摸事件。
  • 好的,我刚到我的电脑。添加了将维基百科提供给我们的指针转换为 GLKMatrix4 的代码

标签: ios swift wikitude projection-matrix


【解决方案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) 那样处理,但正如你所说的方向是正确的,我可能错了。

【讨论】:

  • 好吧,我不知道发生了什么..我不知道我改变了什么,但现在有或没有圆形的轴被交换了(如果我把它上下移动它左右移动,反之亦然)..
猜你喜欢
  • 2018-01-29
  • 2017-12-11
  • 2017-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多