如何获取相机相对于其方向的 SCNVector3 位置 ARKit Swift

2024-04-19

我试图在相机前面附加一个对象,但问题是它始终与初始相机方向相关。我如何调整/获取SCNVector3即使相机的方向是向上还是向下,将物体放在前面的位置?

我现在就是这样做的:

let ballShape = SCNSphere(radius: 0.03)
let ballNode = SCNNode(geometry: ballShape)
let viewPosition = sceneView.pointOfView!.position
ballNode.position = SCNVector3Make(viewPosition.x, viewPosition.y, viewPosition.z - 0.4)
sceneView.scene.rootNode.addChildNode(ballNode)

现在已在评论中澄清,已进行编辑以更好地回答问题

新答案:

您仅使用相机的位置,因此如果相机旋转,不会影响球。

您可以做的是获取球的变换矩阵并将其乘以相机的变换矩阵,这样球的位置将相对于相机的完整变换(包括旋转)。

e.g.

let ballShape = SCNSphere(radius: 0.03)
let ballNode = SCNNode(geometry: ballShape)
ballNode.position = SCNVector3Make(0.0, 0.0, -0.4)
let ballMatrix = ballNode.transform
let cameraMatrix = sceneView.pointOfView!.transform
let newBallMatrix = SCNMatrix4Mult(ballMatrix, cameraMatrix)
ballNode.transform = newBallMatrix
sceneView.scene.rootNode.addChildNode(ballNode)

或者,如果您只想要 SCNVector3 位置,请准确回答您的问题(这样球就不会旋转):

...
let newBallMatrix = SCNMatrix4Mult(ballMatrix, cameraMatrix)
let newBallPosition = SCNVector3Make(newBallMatrix.m41, newBallMatrix.m42, newBallMatrix.m43)
ballNode.position = newBallPosition
sceneView.scene.rootNode.addChildNode(ballNode)

旧答案:

您仅使用相机的位置,因此当相机旋转时,不会影响球。

SceneKit 使用节点层次结构,因此当一个节点是另一个节点的“子节点”时,它会遵循其“父节点”的位置、旋转和缩放。将一个对象附加到另一个对象(在本例中为相机)的正确方法是使其成为相机的“子对象”。

然后,当您设置“子”节点的位置、旋转或变换的任何其他方面时,您将相对于其父节点设置它。所以如果你将位置设置为SCNVector3Make(0.0, 0.0, -0.4),它在“父”翻译的基础上在 Z 中翻译了 -0.4 个单位。

所以要做出你想要的东西,应该是:

let ballShape = SCNSphere(radius: 0.03)
let ballNode = SCNNode(geometry: ballShape)
ballNode.position = SCNVector3Make(0.0, 0.0, -0.4)
let cameraNode = sceneView.pointOfView
cameraNode?.addChildNode(ballNode)

这样,当相机旋转时,球会精确地跟随其旋转,但与相机分开 -0.4 个单位。

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

如何获取相机相对于其方向的 SCNVector3 位置 ARKit Swift 的相关文章

  • iOS Swift 中断键盘事件

    我在拦截键盘事件时遇到问题 我已将我的 iOS 与 SteelSeries Free 游戏手柄控制器 连接 当连接到 iOS 时 它将被检测为蓝牙键盘 这是在我打开Notes时测试的 按下游戏手柄上的任何按钮都会写一个字母 我需要拦截此按钮
  • 如何覆盖应用程序中的内部框架方法(框架外部)

    在 Swift 中子类化时是否有重写内部框架方法 前任 超类 public class BarChartRenderer ChartDataRendererBase internal func drawDataSet context con
  • Swift 错误:无法从 AST 上下文获取模块“My_App”

    我正在使用 Swift 3 Xcode 8 1 CocoaPods 1 1 1 运行后pod update 每次我尝试使用 Xcode 的 lldb 控制台时 它都会打印错误 例如 po self输出 共享 Swift 状态My App已出
  • 如何使用 PKAddPassButton 创建“添加到苹果钱包”按钮以进行本地化通行证

    在我的 iOS 项目中 我有一个屏幕 允许用户创建苹果通行证并将其添加到钱包中 Apple 建议使用 PKAddPassButton 创建 添加到苹果钱包 按钮 当我尝试使用以下代码创建苹果通行证时 let passButton PKAdd
  • iOS 视频压缩 Swift iOS 8 损坏的视频文件

    我正在尝试压缩用户相机从 UIImagePickerController 拍摄的视频 不是现有视频 而是动态视频 以上传到我的服务器 并花费少量时间来完成此操作 因此较小的尺寸是理想的选择 而不是 30 较新质量的相机为 45 mb 这是在
  • 使用 Metal 高效计算 UIImage/CIImage 中有多少透明像素

    我们可以计算有多少个透明像素的最快方法是什么CIImage UIImage 例如 如果我们谈论效率 我的第一个想法是使用Metal Kernel使用任一CIColorKernel左右 但我不明白如何使用它来输出 计数 我还有其他想法 使用某
  • 从基元创建自定义形状

    我正在尝试通过组合原始形状来创建自定义物理形状 目标是创建一个圆形立方体 合适的方法似乎是初始化 形状 变换 我在这里找到的https developer apple com library prerelease ios documenta
  • 如何读取 Xcode 6.1 Instruments .trace 文件?

    我一直在尝试阅读 trace文件 我使用生成的custom仪器模板 仪器 自动机 分配 Leaks using 仪器 https developer apple com library mac documentation Developer
  • 使用 Swift 创建 NSAlert

    我有在 Objective C 中创建和 NSAlert 的代码 但我现在想在 Swift 中创建它 该警报旨在确认用户想要删除文档 我想要 删除 按钮来运行删除功能 而 取消 按钮只是为了消除警报 我怎样才能用 Swift 写这个 NSA
  • 如何快速防止标签中出现孤儿?

    我有一个可以有一两行的标签 如果它有两行 我希望第二行至少有两个 或者可能三个 单词 而不仅仅是一个 关于如何使用 swift 实现这一点有什么想法吗 提前致谢 Daniel 编辑 我删除了我愚蠢的第一个想法 这些想法并没有真正的帮助 好吧
  • Mapkit 在 IOS 13 中使用过多的 CPU

    最近 在一些用户更新到 iOS 13 x 后 我的 iOS 应用程序开始频繁崩溃 在 iOS 12 x 中没有出现该问题 我正在使用 Mapkit 渲染一些 MKPolygons 和 MKPolylines MKPolylines 被删除并
  • SwiftUI - 从 NSObject 继承的 ObservableObject 在 iOS 13 中不会更新

    我知道 这是 无法在 iOS XX 中工作 问题之一 但我完全陷入困境 所以我有一个ObservableObject继承自的类NSObject 因为我需要听委托方法UISearchResultsUpdating class SearchBa
  • 如何像谷歌日历一样将单元格的内容滚动到表格视图中的另一个单元格中?

    我希望用户界面像谷歌日历那样进入桌面视图 它在不同的行中显示相同的日期事件 但是当您向上或向下滚动时 左侧的日期也会向上向下滚动 Can you please help me how to achieve this Please take
  • 如何无限地每1分钟运行一个iOS应用程序?

    我制作了一个应用程序 需要每 1 分钟向服务器发送一次位置和状态更新 我尝试了以下方法 但没有一个能帮助我 有什么解决办法吗 1 NSTimer 很多人建议这样做 但问题出在后台模式上 它只能工作 20 分钟 该应用程序停止发送数据后 2
  • skView.ignoreSiblingOrder 在 swift 中的重要性/效率?

    这样做有多重要 高效skView ignoreSiblingOrder true初始化场景时 现在 我将其设置为 true 但由于某种原因 当我从 MainMenu 场景启动 GameScene 时 它 会在我的角色之前加载背景 即使背景的
  • 仅在 iPhone X 上显示状态栏

    如果不是 iPhone X 则希望隐藏状态栏 如果是 iPhone X 则希望显示状态栏 这很可能必须以编程方式完成 因为 plist 中没有支持此功能的键 我发现的最接近的一个是UIStatusBarHidden 方法一 You have
  • Swift:无法为“[UIViewController]”类型的值添加下标?

    我试图弄清楚如何在 Xcode 7 iOS9 上的 Swift 中解决此问题 并且我也遇到此错误 无法为 UIViewController 类型的值添加下标 索引类型为 Int 任何建议表示赞赏 谢谢 My code func indexP
  • 如何在 Swift 中创建 UIAlertView?

    我一直在努力在 Swift 中创建 UIAlertView 但由于某种原因我无法得到正确的语句 因为我收到此错误 找不到接受提供的 init 重载 论点 我是这样写的 let button2Alert UIAlertView UIAlert
  • let/var 如何解决可变性? [复制]

    这个问题在这里已经有答案了 我没有任何问题 我只是想对有关可变性的问题进行一些澄清 在 Objective C 中我们会使用例如NSMutableArray得到一个可变数组和NSArray得到一个不可变的 我对两者的内部运作了解不多 但据我
  • 快速钥匙串更新只有在第二次尝试时才起作用

    您好 我在更新存储在钥匙串中的登录信息方面遇到了 iOS 钥匙串的一个非常奇怪的问题 因此 如果没有保存的凭据 则正确运行保存函数会保存登录信息 如果登录信息已存在并且用户更新了密码 则更新功能仅正确更新密码 但是 如果登录信息存在并且我尝

随机推荐

  • Python 中的嵌套函数如何工作?

    def maker n def action x return x n return action f maker 2 print f print f 3 print f 4 g maker 3 print g 3 print f 3 st
  • 嵌入.Net运行时

    我是否可以嵌入 net 运行时 以便主机操作系统不需要 net 我正在考虑用 Mono 来做到这一点 如下所示 http mono project com Embedding Mono http mono project com Embed
  • 创建具有任意数量参数的 python lmfit 模型

    有没有办法根据具有任意数量因变量的函数构建 lmfit 模型 例如 from lmfit import Model def my poly x params func 0 for i in range len params func par
  • 如何在 Core Data 上下文之外使用 Core Data 模型子类?

    我正在尝试在 Swift 中制作一个天气应用程序 它将保存我添加到核心数据的城市 每个城市都包含一个天气对象 该对象也保存到核心数据和其他各种变量 但我很快就发现 在 Core Data 上下文之外使用 Core Data NSManage
  • Tensorflow 版本与 Tensorboard 版本

    我想问一下tensorflow版本是否可以与tensorboard版本不同 我有个问题 404 problem 有人建议安装一个新版本的张量板 https github com tensorflow tensorboard issues 9
  • 通过 Android 应用程序安全地使用 Google Plus 登录 Web 应用程序

    我正在开发一个 Android 应用程序 我希望用户使用 Google 登录来登录我的应用程序 目前 我在 PHP 登录脚本中传递从 Google 获得的用户名 该脚本使用用户 ID 加载新会话 目前 该网站非常不安全 任何知道其他用户用户
  • 如何在jstl中使用三元运算符编写if else条件?

    我想在 JSTL 中使用三元写一个 if else 条件 我是用jsp做的 我的代码使用jsp 我怎样才能使用jstl实现它 你的意思是表达语言 https stackoverflow com tags el info 简称 EL 因为这是
  • Maven 程序集插件未使用 FinalName 进行 Attach=true 安装?

    我配置了以下程序集
  • 在 bash 脚本中期望

    我正在尝试将 Expect 脚本实现到 bash 脚本中 请耐心等待 因为我对 bash expect 还很陌生 这是按预期工作的期望脚本 log user 0 file delete foo txt set fh open foo txt
  • 什么是列表与数组列表? [复制]

    这个问题在这里已经有答案了 这两个对象之间的根本区别是什么 是不是效率更高 还有更多方法吗 List是接口 而ArrayList是类 See 数组列表 https docs oracle com javase 8 docs api java
  • Jquery 无法在加载的内容中工作

    它似乎有一个简单的解决方案 但我还无法弄清楚 有一千个类似的主题 但没有一个对我有用 所以我以一种非常简单的方式问这个问题 我有一个按钮 假设按钮 A 我想在单击此按钮时加载外部页面的一部分 加载该部分后 有另一个按钮 B 在加载的内容内
  • Vim 滚动时保持光标位置

    有没有办法在滚动时使 Vim gVim 中的 cusror 位置保持在屏幕外 与许多 Windows 编辑器类似 我了解标记 并且确实使用它们 我也知道 标记 最后编辑位置 但正在寻找其他想法 我问这个问题是因为有时我想将光标保留在某个位置
  • Symfony2:--重新安装问题

    我一直在尝试为 Symfony2 安装 Buzz 我将其添加到 deps 文件中 并尝试更新我的供应商 php bin vendors update 该命令只是告诉我我已经安装了标准版本 并且我应该尝试使用 php bin vendors
  • 使用三个 JS 和 React JS 加载 GLTF 模型

    我使用 React JS 加载从 sketchfab 下载的 GLTF 文件时遇到问题 当我尝试在不使用React 使用常规index html和index js 的情况下执行此操作时 它可以工作 但是当我将代码带入React应用程序时 它
  • 使用 Ember.js 为每个模型添加额外的 url 参数

    我有两个模型 App Providers DS Model extend name DS attr string description DS attr string logo DS attr string products DS hasM
  • Get-AzureWebsite:找不到请求的值“动态”

    我们有一组使用 Azure powershell cmdlet 的自定义 powershell 模块 它们已经正常工作一年多了 我刚刚设置了一台新计算机 每当我尝试运行 Get AzureWebsite 时 我都会收到以下错误 PS C W
  • 使用 Hadoop MapReduce 的计算语言学项目构想

    我需要做一个关于计算语言学课程的项目 是否有任何有趣的 语言 问题 其数据密集程度足以使用 Hadoop MapReduce 来解决 解决方案或算法应尝试分析并提供 语言 领域的一些见解 但是它应该适用于大型数据集 以便我可以使用 hado
  • 如何在 Xamarin 上仅查看我的解决方案的调试输出?

    我正在使用 XF pcl 制作应用程序 Mac 上的 Xamarin 工作室 我正在使用 Debug WriteLine 进行调试 我想避免看到其他 nuget 的控制台日志 我可以看到控制台以蓝色显示我的日志 如何只看到蓝色日志 Than
  • 无法在“节点”上执行“removeChild”

    我在用着http alexgorbatchev com SyntaxHighlighter http alexgorbatchev com SyntaxHighlighter 突出显示我网站上的代码 但有时在我的日志中我会收到如下 Java
  • 如何获取相机相对于其方向的 SCNVector3 位置 ARKit Swift

    我试图在相机前面附加一个对象 但问题是它始终与初始相机方向相关 我如何调整 获取SCNVector3即使相机的方向是向上还是向下 将物体放在前面的位置 我现在就是这样做的 let ballShape SCNSphere radius 0 0