RealityKit – 在 3d 空间中的两点之间创建直线

Nee*_*101 7 augmented-reality swift arkit realitykit

如何使用 RealityKit 在 3d 空间中的两点之间创建一条线?

Scenekit 中有在两点之间创建直线的示例,但是使用 RealityKit 基本上没有。

为了创建这条线,我创建了一个矩形模型实体并将其放置在我的第一个触摸点和当前触摸点之间。从这里开始,我需要做的就是旋转矩形以面向当前触摸点。但是,使用simd_quatf(from: to:)并不能按预期工作。

rectangleModelEntity.transform.rotation = simd_quatf(from: firstTouchedPoint, 
                                                       to: currTouchedPoint)
Run Code Online (Sandbox Code Playgroud)

如果我触摸一个点,然后直接向下拖动,则矩形模型应该是第一个触摸点和当前触摸点之间的一条直线,但它保持水平并略有倾斜。

为了解决这个问题,我尝试获取我最初的水平线作为向量和从第一次触摸到当前触摸点的向量之间的角度

let startVec = currTouchedPoint - firstTouchedPoint
let endVec = endOfModelEntityPoint - modelEntityCenterPoint
let lengthVec = simd_length(cross(startVec, endVec))
        
let theta = atan2(lengthVec, dot(startVec, endVec))
Run Code Online (Sandbox Code Playgroud)

这给了我 3d 空间中两个向量之间的角度,这似乎是正确的,当我检查它时,当我在它们之间直接触摸和拖动时,它给了我 90 度。

问题是我不知道旋转它的轴应该是什么。由于这是 3d 空间,因此该线不需要位于 2d 平面上,当前触摸位置可以位于起始触摸位置的下方和前面。

rectangleModelEntity = simd_quatf(angle: theta, axis: ???)
Run Code Online (Sandbox Code Playgroud)

就我个人而言,我什至不太确定上述是否是在两点之间创建一条线的正确解决方案。理论上,这是相当基本的,创建一个低高度/深度的矩形来模仿一条线,将其放置在起始点和当前触摸点的中心,然后旋转它以使其方向正确。

两个向量之间的上述度数的轴应该是什么?

有没有更好的方法使用 RealityKit/ARKit 在 3d 空间中的点之间创建两条线?

max*_*zer 0

轴是对象开始时面向的方向和现在应该面向的方向的叉积。\n就像它位于位置p1=[x1,y1,z1],最初面向 d1=[0, 0, -1],并且您希望它面对一点,p2=[x, y, z]轴将是叉积:|d1|\xe2\x9c\x95|p2 - p1|

\n

可能需要交换两者,或者只是否定角度,这取决于它的效果。

\n