gpt4 book ai didi

ios - SceneKit unproject Z 文档解释?

转载 作者:行者123 更新时间:2023-12-01 18:05:21 40 4
gpt4 key购买 nike

我正在研究一些 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。

A point whose z component is 0 (resp. 1) is unprojected on the near (resp. far) clip plane.

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

How to use iOS (Swift) SceneKit SCNSceneRenderer unprojectPoint properly

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

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

A point whose z component is 0 (resp. 1) is unprojected on the near (resp. far) clip plane.

声明?

最佳答案

Perspective projection是将用于场景建模的 3D 空间中的点转换为渲染场景的 View 的 2D 像素空间的任务。这是 GPU 在渲染过程中每帧执行数千次的操作。

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

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

因此,要将 2D 点取消投影到 3D 场景空间中,您需要 2D 点本身定义一条进入 3D 场景的光线,然后是一个标准化的深度值来决定您希望生成的 3D 点沿光线多远. (注意,由于 perspective division,归一化深度与距离不成线性对应。)

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

关于ios - SceneKit unproject Z 文档解释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46853925/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com