I was planning to display information of AR object in screen with arrow in 2D. So I used projectPoint
to get corresponding position of object in screen. I have this function to return convert 3D position of node to 2D and CGPoint
to display info text in.
func getPoint(sceneView: ARSCNView) -> (CGPoint, CGPoint){
let projectedPoint = sceneView.projectPoint(node.worldPosition)
return (point, CGPoint(x: CGFloat(projectedPoint.x), y: CGFloat(projectedPoint.y)) )
}
and this to draw line using 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)
What I expect is another end of line to be fixed in node (blue mesh).
Is there something I am missing? Or does projectPoint
works some other way?
edit: It seems projectPoint
is returning correct value but while creating path path.addLine(to: s)
this point is shifting to different position.
path.addLine(to: s)
s here had reversed y so this did the trickHere origin of
SKScene
was in bottom left of screen instead of top left.