SceneKit unproject Z 文档解释?

2024-05-16

我正在经历一些 SceneKit 概念,而我试图在脑海中巩固的一个概念是 unprojectPoint。

我知道该函数将获取 2D 中的一个点并返回 3D 中的一个点(因此具有正确的 Z 值)。

当我阅读文档时,我读到了以下内容:

  /*!
     @method unprojectPoint
     @abstract Unprojects a screenspace 2D point with depth info using the receiver's current point of view and viewport.
     @param point The screenspace position to be unprojected.
     @discussion A point whose z component is 0 (resp. 1) is unprojected on the near (resp. far) clip plane.
     */
    public func unprojectPoint(_ point: SCNVector3) -> SCNVector3

我不太清楚的是当它谈论 Z 时使用的值 0 和 1......

z 分量为 0(或 1)的点未投影到近(或远)剪裁平面上。

当我在网上阅读时,我发现了这个问题:

如何正确使用iOS (Swift) SceneKit SCNSceneRenderer unprojectPoint https://stackoverflow.com/questions/25150737/how-to-use-ios-swift-scenekit-scnscenerenderer-unprojectpoint-properly

当我处理 SceneKit 视图时,Z = 0 总是近平面,Z = 1 总是远平面吗?如果是这样,为什么?而且,Z = 0 和 Z = 1 只是标准化值吗?

那么,有人可以帮助我理解为什么在这种情况下 Z 使用值 0 和 1 吗?最终帮助我理解:

z 分量为 0(或 1)的点未投影到近(或远)剪裁平面上。

陈述?


透视投影 https://en.wikipedia.org/wiki/3D_projection是将用于场景建模的 3D 空间中的点转换为渲染场景的视图的 2D 像素空间的任务。GPU 在渲染过程中每帧都会执行数千次此操作。

但这并不完全是 3D 到 2D 的转换。在渲染过程中,区分哪些对象离相机较近或较远(以便它们正确地相互遮挡)非常重要,因此透视投影还输出归一化的深度分量,其中较低的值表示离相机较近的点(反之亦然) )。 (值被标准化,因为此时需要的只是相对深度。和/或出于传统 3D 图形数学历史和 GPU 设计的原因。)此信息在渲染过程中使用,但随后被有效丢弃 - 您看到的只是 2D 视图。

“取消投影”一个点正在做相反的事情:给定 2D 屏幕空间中的一个点,您需要 3D 场景空间中的一个点。但屏幕空间中的 2D 点对应于 3D 空间中的一条线:视图中的每个像素都沿着光线进入 3D 场景,而您在该像素中看到的内容来自光线相交的第一个 3D 对象。

因此,要将 2D 点取消投影到 3D 场景空间中,您需要 2D 点本身将光线定义到 3D 场景中,然后使用标准化深度值来决定您希望生成的 3D 点沿光线的距离。 (请注意,归一化深度并不与距离线性对应,因为透视划分 https://en.wikipedia.org/wiki/Perspective_divide.)

如果您不知道要寻找的点的深度,则需要考虑两件事......

  • 您实际上是在寻找特定像素“背后”的场景内容(几何图形)吗?如果是这样,您更有可能需要命中测试。
  • 您想要从反投影中获得的 3D 点是否与另一个点相关,以便您能够导出 Z 值?这里还有一些其他的问答:如何正确使用iOS (Swift) SceneKit SCNSceneRenderer unprojectPoint https://stackoverflow.com/a/25154025/957768, 如何使用 SceneKit 的 unprojectPoint 在没有深度值的情况下将 2D 点转换为 3D? https://stackoverflow.com/a/24375188/957768
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SceneKit unproject Z 文档解释? 的相关文章

  • flutter:如果禁用应用程序委托调配,则 UIApplicationDelegate 收到的远程通知需要转发到 FIRAuth

    当我想在 firebase 中使用短信验证时 该应用程序仅在 iOS 上失败 APN 证书已在 firebase 上配置并且FirebaseAppDelegateProxyEnabled是 NOInfo plist 在 verifyPhon
  • 在后台线程上搜索

    我试图在 iPhone 应用程序中搜索数千个对象 但是搜索严重滞后 每次击键后 UI 都会冻结 1 2 秒 为了防止这种情况 我必须在后台线程上执行搜索 我想知道是否有人有一些在后台线程上搜索的提示 我读了一点NSOperation并在网上
  • UIBarButtonItem 按下后更改字体,在外观代理中指定

    我设置了UIBarButtonItem标题字体通过appearanceAppDelegate 中的代理 UIBarButtonItem appearance setTitleTextAttributes NSDictionary dicti
  • 在 swift ios 中播放远程 mp3 文件需要花费大量时间

    我有麻烦了 我想在我的应用程序中播放远程 mp3 文件 但 mp3 文件需要很长时间 大约 5 6 分钟 来播放 为什么 任何人都可以建议我应该做什么 import UIKit import AVFoundation class TestV
  • iOS 低内存崩溃,但内存使用率非常低

    这已经困扰我很长时间了 我的应用程序运行占用大约 2 74MB 内存 没关系 但当它创建 UIWebView 时 它会增加到大约 5 87MB 并继续崩溃 这些是在我的第一代 iPad 上运行时仪器中的实时字节下给出的值 我找不到崩溃日志
  • 自定义信息窗口上的按钮未接收 ios 中的操作

    我在 iOS 应用程序中使用 Google 地图 并实现了一个自定义信息窗口来显示标记的标题 现在 我在该自定义信息窗口上添加了一个按钮 但我的问题是按钮操作方法没有被调用 自定义信息窗口 h import
  • 从 ios 应用程序到 symfony2 Web 应用程序的登录和管理会话

    我使用 Symfony2 开发了一个 Web 应用程序 我用过FOS用户包用于用户管理和安全 现在 我正在考虑为我的网络开发一个本机 iOS 应用程序 但并不真正知道如何解决从应用程序创建会话的问题 并在整个交互用户应用程序中维护它 换句话
  • iPhone:每日本地通知

    我正在尝试实现本地通知 这就是我所设置的 Current date NSDate date NSDate date Add one minute to the current time NSDate dateToFire date date
  • 更改目录时 Gitlab CI 运行程序作业失败退出状态 1

    我正在使用我的个人机器作为使用 Fastlane 的 iOS 项目的运行程序 这主要是因为共享运行器没有为 iOS 设置 因为它们没有安装 Xcode 更改目录时我的作业立即失败 它是一个 shell 运行程序 根本没有其他自定义配置 有什
  • 与 parse-server 和 auth0 的自定义身份验证集成

    我想将 auth0 com 与开源解析服务器结合使用 我当前的方法是通过 iOS 的 Lock 库使用标准登录从 auth0 获取令牌 使用该令牌 我想在解析服务器上调用自定义身份验证方法 该方法检查令牌是否有效 如果有效则将登录用户 我的
  • 单击按钮时退出应用程序 - iOS [重复]

    这个问题在这里已经有答案了 可能的重复 iOS 4 0 中退出应用程序 https stackoverflow com questions 3097244 exit application in ios 4 0 我有一个 AlertView
  • iPhone 的翻译器?

    我对为 iPhone 制作一个解释器很感兴趣 这将是一个实验性的想法 但可能会很棒 我喜欢让我自 己的语言适合移动计算和数学的想法 我查阅了很多资料 发现有关 iPhone 上的口译员的信息很复杂 苹果会允许什么 我见过这个应用程序 这是一
  • 从字典创建 Swift 对象

    如何根据 Swift 字典中的查找值动态实例化类型 希望这对其他人有用 我们需要进行一些研究才能弄清楚这一点 目标是避免巨大的 if 或 switch 语句从值创建每个对象类型的反模式 class NamedItem CustomStrin
  • SDK 和 iOS 部署目标。

    我使用最新的 SDK 4 1 构建项目并设置 iOS 部署目标 3 0 如果我使用4 0 sdk的某些方法 我可以在真正的iPhone 3 0上运行我的项目吗 您只能在 OS 3 设备上运行您的项目 如果有条件地编码围绕您想要使用的 OS
  • UITableViewCell 内嵌套 UIStackView 内的 UILabel 有时会被截断

    我的一个表设置中有一个表视图单元格 其中包含以下视图层次结构 外部水平 stackview 固定到单元格内容视图的尾部 前部 底部和顶部边缘 右侧标签固定到其父 stackViewHackView 的尾部 前部 底部和顶部边缘 在我的控制器
  • 找不到 Cocoa/Cocoa.h 文件

    我在用XMPPFramework在我的应用程序中 我已将 Cocoa Cocoa h 导入到我的 m 文件中 但是当我构建项目时Xcode显示错误 错误 未找到 Cocoa Cocoa h 文件 我该如何解决这个错误 如果您正在为 iOS
  • iOS:如何创建核心数据库的备份副本?以及如何导出/导入该副本?

    我想为我的应用程序的用户提供创建核心数据数据库备份的可能性 特别是在他切换到新设备等情况下 我该怎么做呢 特别是如何重新导入该文件 我的意思是 假设他制作了数据库的备份副本 然后更改了大量内容并想要重置为以前保存的备份副本 我该怎么做呢 T
  • iOS 搜索栏不显示结果

    更新 这实际上有效 我的自定义单元格的样式尚未出现 因此单元格看起来是空白的 那我怎样才能得到searchResultsTableView使用我的自定义单元格 我在表格视图中实现了搜索栏 当我调试时搜索 过滤所有工作 但是当我在搜索栏中输入
  • Facebook 登录打开错误的应用程序

    我正在尝试使用 facebook 实现应用程序的登录 但每次我尝试登录时 它都建议打开错误的应用程序 我尝试了一些在这里找到的东西 但没有成功 在 Facebook 的开发者页面上我添加了一个后缀 我的 plist 如下 有谁知道发生了什么
  • iOS 中是否需要 Google App Indexing SDK 才能使用 Google DeepLinking?

    我想用谷歌应用程序索引与我的网页和 iOS 应用程序 我支持通用链接 or 深层链接用谷歌术语 与苹果Search并相应地设置我的网页 From 谷歌文档 https developers google com app indexing i

随机推荐