给定用户之前选择的两个点,我想在 arkit 中将平面节点添加到我的虚拟世界。
1 回答
0
两个点不足以定义一个唯一的平面。两个任意点共享的空间是一条线——无限多的平面可以共享这条线(将它们视为旋转轴)。
如果您想基于任意用户选择的点定义平面,您可以探索其他一些选项:
让用户选择三个点而不是两个点,因为三个点定义了一个唯一的平面。取由这些点形成的三角形两条腿的叉积,你就有了平面的法线向量,它告诉你它的方向。
选择两个点,然后假设在连接这些点的所有可能平面中,用户想要一个特定的——比如说,一个法向量最接近垂直的平面。(更多的交叉产品可能会有所帮助。)
假设用户想要一个水平的平面(平行于 xz 平面)。对于水平面,您只需要一个用户放置的点。
从您正在寻找垂直平面的说明开始:
- 减去两点得到它们之间的线段:
let segment = pointA - pointB或类似 - 取该向量和垂直轴的叉积,得到它们所在的垂直平面的法向量:
let normal = cross(segment, float3(0,1,0)) - 法线向量定义了平面的方向,但您可能需要一个四元数或变换矩阵,以便可以在 SceneKit 中使用该方向。有一个四元数初始化器,它可以让你从一个基向量旋转到另一个,所以你的垂直平面的方向可以基于从垂直到你计算的法线的旋转:像
node.simdOrientation = simd_quatf(from: float3(0,1,0), to: normal)
于 2018-06-20T17:19:25.173 回答