我使用wikitude,我需要获取识别标记的屏幕坐标。我已将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)
问题在于,如果我将标记置于视图中心,我移动计算的坐标,也会居中,当我移动标记时,视图会向右移动,但它正在移动&#34太快"所以它不会留在标记上,而是在我移动标记的方向上跑出屏幕。
修改 这是我用来转换指针的代码wikitude为我们提供了GLKMatrix4:
-(instancetype)initWithCArray:(const float *)pointer{
self = [super init];
if(self != nil){
glkMatrix = GLKMatrix4Identity;
memcpy(glkMatrix.m, pointer, 16*sizeof(float));
}
return self;
}
答案 0 :(得分:0)
如果没有测试,我不明白为什么你想要回合并怀疑这是问题的根源。删除舍入:
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
)一样处理,但正如你所说的方向是对的,我可能错了。