我打算在屏幕上用 2D 箭头显示 AR 对象的信息。所以我用了projectPoint
获取物体在屏幕中对应的位置。我有这个函数返回将节点的 3D 位置转换为 2D 并CGPoint
显示信息文本。
func getPoint(sceneView: ARSCNView) -> (CGPoint, CGPoint){
let projectedPoint = sceneView.projectPoint(node.worldPosition)
return (point, CGPoint(x: CGFloat(projectedPoint.x), y: CGFloat(projectedPoint.y)) )
}
这是用来画线的SpriteKit
:
let (f,s) = parts[3].getPoint(sceneView: sceneView)
line.removeFromParent()
let path = CGMutablePath()
path.move(to: f)
path.addLine(to: s)
line = SKShapeNode(path: path)
spriteScene.addChild(line)
这就是我得到的 https://media.giphy.com/media/4JSAlAy8UgWaA8pbXj/giphy.gif
我期望的是线的另一端固定在节点(蓝色网格)中。
我有什么遗漏的吗?或者确实projectPoint
以其他方式工作吗?
编辑:看来projectPoint
返回正确的值,但在创建路径时path.addLine(to: s)
这个点正在转移到不同的位置。
path.addLine(to: s)
这里的 s 颠倒了 y 所以这成功了
let frame = self.sceneView.frame
let sInversed = CGPoint(x: from.x, y: frame.height - s.y)
path.addLine(to: sInversed)
这里的起源SKScene
位于屏幕左下角而不是左上角。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)