gpt4 book ai didi

scenekit - ARKit:将在 ARPointCloud 中找到的特征点投影到图像空间并检查它是否包含在屏幕上的 CGRect 中?

转载 作者:行者123 更新时间:2023-12-05 07:39:39 52 4
gpt4 key购买 nike

因此,我正在使用 ARKit 在 session 中显示特征点。我能够获取当前帧,然后获取其 rawFeaturePoints 并将几何体放置在世界空间中,以便用户可以在屏幕上看到它们。效果很好。

然后在应用程序中,我在屏幕上有一个象限。我的目标是在屏幕坐标中显示投影将落入屏幕 2D 象限内的特征点。为此,我尝试了这个:

  1. 将特征点作为 vector_float3 数组获取
  2. 对于这些点中的每一个,我都会得到一个 SCNVector3,将 Z 分量设置为 0(近平面)
  3. 然后我调用 ARSCNView:

    public func projectPoint(_ point: SCNVector3) -> SCNVector3

这种方法确实给我返回了 2D 点,但是,根据相机的位置,它们似乎偏离了很远。

那么,由于在 ARKit 中相机不断移动,我是否需要考虑到这一点才能实现我解释的内容?

编辑:关于翻转从相机上的 projectPoint 调用中检索到的 CGPoint 的 Y:

/**
Project a 3D point in world coordinate system into 2D viewport space.

@param point 3D point in world coordinate system.
@param orientation Viewport orientation.
@param viewportSize Viewport (or image) size.
@return 2D point in viewport coordinate system with origin at top-left.
*/
open func projectPoint(_ point: vector_float3, orientation: UIInterfaceOrientation, viewportSize: CGSize) -> CGPoint

Remy San 提到翻转 Y。我试过了,它似乎确实有效。他正在做的事情和我正在做的事情之间的一个区别是我没有使用 SKScene,而是使用 SCNScene。查看它说的文档:

...The projection of the specified point into a 2D pixel coordinate space whose origin is in the upper left corner...

所以,让我失望的是,如果我不翻转 Y,它似乎无法正常工作。 (我会尝试发布图片来展示我的意思)。但是,如果翻转 Y 使事情看起来更好,那么它就违反了文档。没有?

最佳答案

我了解到您正在使用内在矩阵进行投影。 ARkit 技术还可以为您提供一些额外的信息。它们是 cameraPoseARFrameprojectionMatrixtransformToWorldMap 矩阵。从世界坐标转换为像素坐标时,您是否考虑了它们?

如果有人有将这些矩阵应用于点云坐标以将其转换为屏幕坐标的方法,请帮忙回答我的问题?我认为它们可以为最终结果提供更高的精度和准确性。

谢谢!

关于scenekit - ARKit:将在 ARPointCloud 中找到的特征点投影到图像空间并检查它是否包含在屏幕上的 CGRect 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46937927/

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