从 CGPoint 获取 SCNVector3

2023-12-14

我正在尝试从 CGPoint 获取 SCNVector3。我正在使用手势识别器来获取触摸的位置(作为 CGPoint)。

问题是,当我进行测试时,触摸并不总是会击中某些东西,因为并不总是有物体被触摸。 (触摸一个空的地方,将你的船移动到那个空的地方)。

我发现的其他堆栈溢出问题使用 SCNHitTestResult 来获取worldCoordinates但这对我不起作用。

有谁知道如何找到这个?鉴于我当然知道 z 坐标。移动的船舶始终以 z 位置为 1 移动。

我需要世界坐标才能使用将 SCNNode 移动到具有 CGPoint 的触摸点的操作。谢谢!


那么,您想将视图空间中的点转换为场景空间中的点吗?当然,问题在于场景空间具有第三维,而视图空间则没有。您使用SCNView(或其他渲染器)方法projectPoint and unprojectPoint在 3D 场景空间和……也是 3D 视图空间之间进行转换?是的 - 屏幕像素点的二维,以及归一化深度的一维:对于近剪裁平面上的点,z 坐标为 0,对于远剪裁平面上的点,z 坐标为 1。

无论如何,您有一个有用的约束,因为您希望将视图空间点映射到特定平面上(z=1)在场景空间中。如果场景空间的方向使得所述平面与视图方向正交,即相机直接指向 +z 或 -z 方向,则您将获得更有用的约束。

如果要将视图空间点映射到特定的场景空间深度,则需要知道该平面的视图空间深度是多少。使用projectPoint为了那个原因:

SCNVector3 projectedPlaneCenter = [view projectPoint:planeNode.position];
float projectedDepth = projectedPlaneCenter.z;

现在,抓住它,每当您需要将触摸位置映射到该平面上时,您就可以使用它:

CGPoint vp = [recognizer locationInView:view];
SCNVector3 vpWithDepth = SCNVector3Make(vp.x, vp.y, projectedDepth);
SCNVector3 scenePoint = [view unprojectPoint:vpWithDepth];

如果你的场景的 z 轴不平行于相机,那就有点困难了——你必须弄清楚你的场景在哪里z=1平面对于您处理的任何视空间点都是独立的。在这种情况下,您可能会发现添加不可见的更容易SCNPlane到您的场景并使用hitTest/worldCoordinates方法来定位该平面上的点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 CGPoint 获取 SCNVector3 的相关文章

  • iPad 照片选择器崩溃

    我正在使用以下函数根据 UIActionSheet 的结果激活设备相机或图像选择器 如果 fromCamera YES 那么它适用于 iPhone 和 iPad 如果 fromCamera NO 那么它可以在 iPhone 上运行并出现图像
  • 如何使用 iPhone SDK 实现可滑动的图像堆栈(例如照片应用程序)?

    我想获取一堆图像 或者可能是一组用于下载图像的 URL 并以全屏方式显示它们 一次一个 使用 iPhone SDK 使用用户滑动来平滑地为堆栈中的下一个图像设置动画 Apple 的 Photo app 似乎可以做到这一点 此外 如果尚未检索
  • 确定 SceneKit 中 SKVideoNode 的视频大小/长宽比

    如何从 AVPlayer 获取视频的视频大小来设置节点的几何大小 例如 我有一个具有宽度和高度的 SCNPlane let planeGeo SCNPlane width 5 height 5 所以现在我实例化我的视频播放器 let vid
  • 模块未使用库演化支持进行编译;使用它意味着无法保证二进制兼容性

    最近我遇到了 SDK 的编译时警告 这是否意味着它不是使用目标设置 构建用于分发的库 构建的 你需要设置Build Libraries for Distribution在项目中Build Settings to No然后它就会消失
  • 在 OS X 上创建和使用静态库

    好的 我正在尝试创建一个 Cocoa 库 静态 并使用 但我不断收到错误 我创建了一个超基本的静态库 TSXLib 其中仅包含一个额外的类 import
  • 如何将 UILabel 的值绑定到实例变量?

    我是 mac objective c 的新手 我的问题是 我想知道是否可以将 UILabel 文本绑定到变量 而不必在值更改时手动设置文本 例如 在 Mac OS 上 当我打开新的 Finder 窗口并删除文件时 任务栏中的全局可用空间就会
  • Objective-C – 拥有包含 TestFlight SDK 的 TestFlight 配置

    我已按照 TestFlight 的说明复制 发布 配置 我还使用 TestFlight SDK 从我的应用程序获取实时报告 通过这样做 我必须在我的应用程序中包含一些 TestFlight 代码 当然 我不想在我的应用程序的发布版本中包含此
  • Apple Watch 预构建操作可更改故事板 customModule 引用

    我目前有一个项目 其中包含同一应用程序的 3 个不同版本 不同的品牌等 该项目运行得很好 从那时起 我添加了 3 个新的 Apple Watch 目标 每个应用程序 版本 1 个 其中 2 个引用 主 Apple Watch 目标中的文件
  • UIPanGestureRecognizer 对坐标的限制

    我在主 UIView 中添加了一个子视图 称为panel 并且我向其中添加了gestureRecognizer 因为我希望它只能在Y轴上拖动并且只能在某些限制下 即160 300 超过300它不能拖动 我以这种方式实现了手势处理 IBAct
  • ios水平居中约束问题?

    I am having hard time in learning constraints auto layout in iOS I have used any width any height I have a storyboard sc
  • 水平 UICollectionView 单行布局

    我正在尝试使用以下命令设置简单的水平布局UICollectionView 兜圈子却没有达到预期的结果 所以任何指针或例子将不胜感激 我粘贴经常更改的代码但没有成功可能没什么意义 该图像显示两行 第一行是单个项目 尺寸正确并且在中心正确对齐
  • 什么是 WKWebView 中的 WKErrorDomain 错误 4

    fatal error LPWebView encounters an error Error Domain WKErrorDomain Code 4 A JavaScript exception occurred UserInfo 0x7
  • Apple Mach-O 链接器错误(静态,不是 ld)

    我最近遇到了 Apple Mach O 链接器错误 大多数指南建议将 构建设置 中的位码更改为 否 但它仅适用于 ld 错误 这与我的不同 我会提供截图 请帮忙修复bug pod HandySwift 导致了错误的出现 这是它的 Githu
  • 在 iOS 应用程序中拨打电话

    我有一些代码尝试在应用程序中进行调用 但它似乎不起作用 UIApplication myApp UIApplication sharedApplication NSString theCall NSString stringWithForm
  • iOS 7 tabBar 横线,如何去掉?

    Apple 在 iOS 7 中的 tabBar 上添加了一条细线 该线应该在 tabBar 和 UI 之间起到阴影或淡入淡出的作用 由于我使用的是定制的 tabBar 这条线非常令人恼火 你如何删除它 请告诉我这是可能的 否则我需要重新设计
  • 在 WKWebView 中禁用缩放?

    有谁知道在 WKWebView 中禁用双击和捏缩放的简单方法 我尝试过的任何方法都不起作用 Webview scrollView allowsMagnification false Error value of type WKWebView
  • 未知异常和崩溃

    当我尝试快速滚动表格视图或从远程重新加载数据时 我的应用程序崩溃了 当我先进行远程获取然后滚动表格视图时 一切似乎都工作正常 我不知道下面的崩溃日志意味着什么 它只是有时工作正常 有时崩溃 Incident Identifier 710A1
  • 从现有坐标地图套件中查找最近的位置

    我正在为拥有多家商店的客户开发 iPhone 应用程序 目标 C 我有数组中所有商店 20 的坐标 纬度 长 目前我正在考虑循环遍历商店坐标数组并获取从用户当前位置到商店位置的距离 然后将它们添加到数组中并按最小距离进行排序 这是正确的方法
  • 诊断和仪器均缺少“僵尸”选项

    运行 Xcode 4 0 2 Zombie 选项丢失 其他 SO 帖子建议找到它的两个地方 Product gt Run looks like this Product gt Profile looks like this 奇怪的是 我之前
  • Glib 在 iPhone 应用程序中的使用

    我想基于现有的开源 Objective C 框架开发一个 iPhone 应用程序 但是该框架广泛使用了 glib 库 我找不到一种方法来构建和包含 iPhone 应用程序的 glib 库 非越狱 有什么办法可以做到这一点 或者有没有推荐的方

随机推荐

  • 使用 spring data jpa 按角色查找用户

    我的用户实体 Entity public class User Id GeneratedValue strategy GenerationType IDENTITY private Integer id Column nullable fa
  • 迁移到 CocoaPods 1.0.1

    我正在尝试将现有的 CocoaPod 配置从 0 39 0 迁移到 1 0 1 我们现有的Podfile好像 platform ios 9 0 use frameworks target Tools do pod zipzap gt 8 0
  • 使用 splat 运算符通过引用块来传递参数

    当使用 splat 运算符通过引用将参数传递给块时 似乎会复制参数 我有这个 def method a 1 2 3 yield a p a end method x y z z 0 gt this puts and returns 1 2
  • 如何从日期中减去一天?

    我有一个Pythondatetime datetime目的 减去一天的最佳方法是什么 您可以使用timedelta object from datetime import datetime timedelta d datetime toda
  • AttributeError:“模块”对象没有属性“调用”:Python

    我是 python 新手 不知道这里发生了什么 我尝试了很多搜索 但最终不得不在这里询问 我正在尝试学习执行简单命令的子进程 import subprocess subprocess call ls 现在 当我运行该程序时 我收到此错误 T
  • 更改任务栏组的图标(Win7)

    Using LoadImage我更改了组中所有窗口的图标 但是组图标不会改变 如何将相应的组获取到窗口并设置其图标 组图标来自 EXE 文件本身 在多个 EXE 属于同一组的情况下 我想任务栏有某种算法来决定从哪个 EXE 中提取图标 没有
  • MVC3 @html.radiobuttonfor

    这是我的课程 public class QuestionClass public static FeedbackDatabaseDataContext context new FeedbackDatabaseDataContext publ
  • 如果值超出范围,Ruby 优雅地返回最小值/最大值

    所以我正在编写一个程序来模拟流程并需要计算费用 逻辑是 如果费用金额小于最小值 则使用最小值 如果费用金额大于最大值 则使用最大值 我当然可以在多行上实现这一点 但我很想知道是否有更优雅的方法可以在 Ruby 中实现这一点 fee amou
  • 如何在couchdb中执行“不等于”?

    各位 我想知道什么是建模文档和 或映射函数的最佳方法 允许我进行 不等于 查询 例如我的文档是 1 name George 2 name Carlin 我想触发一个查询 返回名称不等于 John 的每个文档 注意 我事先没有所有可能的名称
  • 更新配置文件(分发)并保持当前应用商店应用程序正常运行

    我在应用程序商店中有一个应用程序 它使用的 iOS 配置文件 分发 无效 此配置文件包含推送证书 所以我想要重新生成Provisinig Profiles 问 当我通过更新 Provisioning Profile 更新 Appstore
  • Xcode 中的 fstream 遇到问题

    我在验证函数中用于输入目的的 REGISTER txt 是否存在时遇到问题 见下文 我的理解是 如果文件不存在 则文件不会被打开 文件流变量 inData 将为假 因此 我可以在 if else 语句中使用该变量来验证它是否打开 但即使 R
  • 使用 Firebase photoURL 时显示的图像损坏

    我使用 firebase 电子邮件和密码身份验证来注册用户 并将用户的 photoURL 设置为用户上传的图像 当我将图像的 src 设置为 user photoURL 时 图像不会显示 但当我检查代码时 我可以看到 src photoUR
  • 事务性保存而不调用更新方法

    我有一个用 Transactional 注释的方法 我从 Oracle DB 检索一个对象 更改一个字段 然后从该方法返回 我忘记保存对象 但发现数据库无论如何都会更新 应用上下文
  • 阻止除 AJAX 请求之外对 PHP 文件的直接访问?

    我希望有一个使用 AJAX 访问 PHP 文件的网页 ajax file ajax php 问题是 我不希望人们能够在浏览器中键入地址来直接访问该 PHP 文件 有没有办法让只有 AJAX 请求才能访问该文件 我可以在 PHP 文件中检查一
  • JFrame 对象的垃圾收集器

    import javax swing public class Main public Main JFrame jf new JFrame Demo jf setDefaultCloseOperation JFrame EXIT ON CL
  • 按表达式树进行多列分组

    根据帖子引用属性的 LINQ 表达式感谢 Daniel Hilgarth 的帮助 我已经实现了 Group By Extension 我需要帮助来扩展 GroupByMany 如下所示 unitOfWork MenuSetRepositor
  • 为 PHP 设置 Apache 时遇到问题

    我对 PHP 非常陌生 我正在尝试设置我的 apache 开发服务器 但遇到了很多麻烦 我安装了 XAMPP 但无法让 apache 正常启动 我读到我可能遇到端口问题 但是我确实将端口从默认值 80 更新为 8080 配置中的 监听 但这
  • 当我执行syncdb时,Django出现UnicodeDecodeError

    我尝试使用 MySQL 设置 Django 但出现 UnicodeDecodeError 您能让我知道如何解决这个问题吗 我搜索了有关错误的信息 但我无法理解 我找到了这些代码并尝试了 def unicode self return str
  • 在两台笔记本电脑上使用 git,没有裸仓库

    我已经在我的第一台笔记本电脑上开始了项目 git init 然后开始工作 明天我要去度假 我想随身携带我的小型笔记本电脑 并时不时地参与项目 我通过 ssh 从更大的笔记本电脑克隆存储库 git clone ssh address 当我回来
  • 从 CGPoint 获取 SCNVector3

    我正在尝试从 CGPoint 获取 SCNVector3 我正在使用手势识别器来获取触摸的位置 作为 CGPoint 问题是 当我进行测试时 触摸并不总是会击中某些东西 因为并不总是有物体被触摸 触摸一个空的地方 将你的船移动到那个空的地方