使用 CGMutablePath 创建路径会创建指向错误 CGPoint 的线

2024-03-17

我打算在屏幕上用 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(使用前将#替换为@)

使用 CGMutablePath 创建路径会创建指向错误 CGPoint 的线 的相关文章

随机推荐

  • 调用堆栈仅包含外部代码

    我希望当我点击另一个时变得可见 我使用 jQuery 来做这件事 但我对此并不擅长 我写了脚本 我通过 完成的布局 Panel visiblePanel new Panel visiblePanel Style Add background
  • 将列表打印为表格数据

    我对 Python 还很陌生 现在我正在努力如何很好地格式化我的数据以进行打印输出 我有一个用于两个标题的列表 以及一个应该是表格内容的矩阵 就像这样 teams list Man Utd Man City T Hotspur data n
  • 在 Mac 上安装 xgboost - ld: 未找到库

    我正在尝试在我的 Mac 上安装支持 OpenMP 的 xgboost 我安装了gcc没有问题 brew install gcc without multilib 然后克隆 git 存储库 git clone recursive https
  • 在 Python 中使用 for 循环从外部文件打印列表中的每一项

    我正在编写一个从 txt 文件读取 2D 列表的程序 我试图循环遍历该列表 并打印其中的每个项目 我使用了 for 循环来遍历列表中的每个项目 txt 文件中二维列表的内容为 1 10 Hello World 这是我到目前为止打开文件 读取
  • Bokeh - 堆叠和分组图表

    是否可以在散景中创建一个既堆叠又分组的图 有点像http www highcharts com demo column stacked and grouped http www highcharts com demo column stac
  • Datastax java 驱动程序 3.0.0 未找到枚举注释

    希望我能很好地阅读文档 http docs datastax com en developer java driver 3 0 java driver reference crudOperations html http docs data
  • 如何使用 glide 加载圆形 appcompat 操作栏徽标

    到目前为止 我已经完成了以下操作 如果我省略圆形图像创建部分 它可以正常工作 但我必须在操作栏中显示圆形图像 这是我到目前为止所尝试过的 任何帮助将不胜感激 Glide with mContext load doctorDetailsLis
  • 使用 Android SDK 3.0 登录 Facebook 导致 ANR 或根本无法工作

    为了让用户在 Android 应用程序中登录 Facebook 我尝试使用以下代码 用户登录后 应获取其所有朋友的位置 不幸的是 此代码有时会导致 ANR 如 Google Play 开发者控制台中报告的那样 有时甚至不起作用 如果我删除
  • 访问 iframe 中的表

    i have a website login email protected cdn cgi l email protection pas 12345678 log in and go to the drivers section left
  • 代码签名错误:身份“iPhone Developer”与默认钥匙串中的任何有效证书/私钥对不匹配

    我正在尝试创建我的应用程序的临时发行版以发送给同事 尝试存档我的项目以供分发时出现以下错误 代码签名错误 身份 iPhone 开发者 与任何有效的不匹配 中的证书 私钥对 默认钥匙串 这些是我遵循的步骤 我已在配置门户中注册了该设备 我已在
  • Vulkan命令执行顺序

    引用Vulkan 1 0规范文档 chapter 5 Command Buffers 第4段 除非另有说明 并且没有显式同步 否则通过命令缓冲区提交到队列的各种命令可以按相对于彼此的任意顺序执行 和 或同时执行 在第2 1 1章 队列操作
  • LDADD 和 LIBADD 有什么区别?

    我正在尝试设置一个混合使用 libtool 库和可执行文件的 automake 项目 并且我很难理解 automake 文档 尤其是 as 涉及告诉编译器进行链接 那么有人可以解释一下之间的区别吗LDADD and LIBADD 像 什么时
  • 如何将 cv::Mat 转换为 QImage 或 QPixmap?

    我尝试环顾四周并尝试了我发现的所有内容 但尚未找到解决此问题的方法 我正在尝试通过单击按钮来更新 QT 应用程序中的图像 在构造函数中 我成功地显示了图像 cv Mat temp cv Mat this gt cv size CV 8UC3
  • “推送通知”-反馈、卸载应用

    Apple 推送通知 反馈服务 您如何知道用户何时卸载您的应用程序 这样您就可以从推送服务器中删除他们的设备令牌 你根本不知道 您可以获取对于同一应用程序令牌字符串可能相同的设备标识字符串 并跟踪特定设备的令牌是否已更改 因此 您可以使用新
  • Web Essentials 2017 和 TypeScript 定义生成

    刚刚从 Visual Studio 市场安装了 Web Essentials 2017 但似乎缺少从 C 类创建 TypeScript 定义的功能 在 Web Essentials 2015 中 我将鼠标右键悬停在 C 类文件上 将会出现一
  • JavaScript 对象字面量和数组

    我有以下 JavaScript 代码 oCoord x null y null var aStack oCoord x 726 oCoord y 52 aStack push oCoord oCoord x 76 oCoord y 532
  • file_get_contents 失败并显示“getaddrinfo 失败:没有与主机名关联的地址”

    我正在尝试从另一台主机获取该页面 我按照 hph 手册所述 page file get contents http www example com echo page 但它失败了 在 apache 日志中我得到以下内容 Mon Oct 12
  • 为什么scss/css中文件名前面要加“_”或“_”?

    Why put scss 中文件名前面 filename scss 为什么需要 下划线 是 scss 的部分内容 这意味着样式表将被导入 import 到主样式表 即 styles scss 使用部分的优点是您可以使用多个文件来组织代码 并
  • 教义 2 中的关系

    我完全没有理解教义中的关联 我想知道单向和双向关系有什么区别 学说2中的正方和反方是什么 双向和单向关系 双向和单向与 PHP 对象中的引用有关 如你看到的here http www doctrine project org docs or
  • 使用 CGMutablePath 创建路径会创建指向错误 CGPoint 的线

    我打算在屏幕上用 2D 箭头显示 AR 对象的信息 所以我用了projectPoint获取物体在屏幕中对应的位置 我有这个函数返回将节点的 3D 位置转换为 2D 并CGPoint显示信息文本 func getPoint sceneView