gpt4 book ai didi

swift - ARSCNView unprojectPoint

转载 作者:行者123 更新时间:2023-11-28 06:01:29 26 4
gpt4 key购买 nike

我需要将 ARSCNView 的 2d 坐标空间中的点转换为 3d 空间中的坐标。基本上是一条从视点到触摸位置的射线(距离设定的距离)。

我想为此使用 arView.unprojectPoint(vec2d),但返回的点似乎总是位于 View 的中心

vec2d 是一个 SCNVector3 从这样的 2d 坐标创建

SCNVector3(x, y, 0) // 0 specifies camera near plane

我做错了什么?我怎样才能得到想要的结果?

最佳答案

我认为您至少有 2 种可能的解决方案:

首先

使用hitTest(_:types:)实例方法:

This method searches for real-world objects or AR anchors in the captured camera image corresponding to a point in the SceneKit view.

let sceneView = ARSCNView()

func calculateVector(point: CGPoint) -> SCNVector3? {

let hitTestResults = sceneView.hitTest(point,
types: [.existingPlane])

if let result = hitTestResults.first {

return SCNVector3.init(SIMD3(result.worldTransform.columns.3.x,
result.worldTransform.columns.3.y,
result.worldTransform.columns.3.z))
}
return nil
}

calculateVector(point: yourPoint)

第二

使用unprojectPoint(_:ontoPlane:)实例方法:

This method returns the projection of a point from 2D view onto a plane in the 3D world space detected by ARKit.

@nonobjc func unprojectPoint(_ point: CGPoint, 
ontoPlane planeTransform: simd_float4x4) -> simd_float3?

或:

let point = CGPoint()
var planeTransform = simd_float4x4()

sceneView.unprojectPoint(point,
ontoPlane: planeTransform)

关于swift - ARSCNView unprojectPoint,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49573794/

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