[英]World to screen coordinates
我正在使用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)
问题是,如果我将标记居中而不是视图,我会随着计算的那些坐标移动,也会居中,当我移动标记时,视图向右移动但是它“移动得太快”所以它不会停留在标记上但在我移动标记的方向上用完了屏幕。
编辑:这是我用来转换指针的代码wikitude为我们提供了GLKMatrix4:
-(instancetype)initWithCArray:(const float *)pointer{
self = [super init];
if(self != nil){
glkMatrix = GLKMatrix4Identity;
memcpy(glkMatrix.m, pointer, 16*sizeof(float));
}
return self;
}
如果没有测试,我不明白为什么你想要回合并怀疑这是问题的根源。 删除舍入:
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
)一样处理,但正如你所说的方向是对的,我可能错了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.