【问题标题】:Creating path using CGMutablePath creates line to wrong CGPoint使用 CGMutablePath 创建路径会创建到错误 CGPoint 的行
【发布时间】:2018-09-01 18:01:11
【问题描述】:

我打算用二维箭头在屏幕上显示 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)

This is what i get

我期望在节点(蓝色网格)中修复另一端的行。
我缺少什么吗?还是projectPoint 以其他方式工作?

编辑:似乎projectPoint 正在返回正确的值,但是在创建路径path.addLine(to: s) 时,这一点正在移动到不同的位置。

【问题讨论】:

    标签: ios swift sprite-kit scenekit arkit


    【解决方案1】:

    path.addLine(to: s) 这里的 y 颠倒了,所以这就成功了

    let frame = self.sceneView.frame
    let sInversed = CGPoint(x: from.x, y: frame.height - s.y)
    
    path.addLine(to: sInversed)
    

    SKScene 的来源在屏幕的左下角而不是左上角。

    【讨论】:

    • 我正在尝试从世界坐标做同样的事情,但使用 bezierpath 在 uiview 上显示连接线。我得到非常不规则的形状。是不是点错了? (测量房间边缘3-5米左右的点数)
    • 我正在尝试从世界坐标做同样的事情,但使用 bezierpath 在 uiview 上显示连接线。我得到非常不规则的形状。是不是点错了? (测量房间边缘3-5米左右的点数)
    • 不确定 uiview 是否与 SKSceneview 一样。如果您提供更详细的信息,也许我可以帮助您
    • 嗨@AlokSubedi!我正在尝试将项目点用于 3D 面部跟踪网格到 ARkit 中的 2D 图像点。你能帮我一把吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    • 1970-01-01
    • 1970-01-01
    • 2015-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多