ARHitTestResult.worldTransform
是
matrix_float4x4
类型,因此它是一个 4x4 矩阵。
.columns
编号从
0
开始,因此向量
(hitResult.worldTransform.columns.3.x, hitResult.worldTransform.columns.3.y, hitResult.worldTransform.columns.3.z)
是 4x4 矩阵最后一列顶部的三个元素。
您可以安全地假设矩阵的底行为
(0, 0, 0, 1)
,位置向量的形式为
(x, y, z, 1)
。然后看看将矩阵应用于向量时会发生什么:
a b c d x a*x + b*y + c*z + d
e f g h y e*x + f*y + g*z + h
i j k l * z = i*x + j*y + k*z + l
0 0 0 1 1 1
(d, h, l)
不会相乘,只会像另一个向量一样相加。这等同于:
a b c x d
e f g * y + h
i j k z l
因此,矩阵的左上角3x3部分对于(x, y, z)
执行某些操作,但不会移动它。例如,如果在开始时(x, y, z)
为(0, 0, 0)
,则结束时它肯定仍然是(0, 0, 0)
。所以这个3x3矩阵可能旋转、缩放或做许多其他事情,但不能进行平移。
(d, h, l)
则显然只是一个平移,因为它只是在最后添加的一些内容。而平移正是你想要的——这是从当前相机位置到平面的方法。因此,您可以直接提取它。