我正在网上学习ARKit教程,将物体放在飞机上.
boxNode.position = SCNVector3(hitResult.worldTransform.columns.3.x,hitResult.worldTransform.columns.3.y + Float(boxGeometry.height/2), hitResult.worldTransform.columns.3.z)
Run Code Online (Sandbox Code Playgroud)
他使用上面的代码将它放在你点击屏幕的位置
这是什么意思:
hitResult.worldTransform.columns.3.x
Run Code Online (Sandbox Code Playgroud)
为什么是columns.3而不是columns.0?
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
Run Code Online (Sandbox Code Playgroud)
在(d, h, l)
没有得到相乘,只是加在,好像他们是独立的载体.它与以下相同:
a b c x d
e f g * y + h
i j k z l
Run Code Online (Sandbox Code Playgroud)
因此,矩阵的左上角3x3部分可以执行某些操作(x, y, z)
但不会移动它.例如,如果(x, y, z)
是(0, 0, 0)
在开始那么它肯定仍然(0, 0, 0)
在最后.所以3x3矩阵可能会旋转,缩放或做其他一些事情,但不能成为翻译.
(d, h, l)
虽然,显然只是一个翻译,因为它只是你最后添加的东西.翻译就是你想要的 - 它是你从当前相机位置到达飞机的方式.所以你可以直接把它拉出来.
归档时间: |
|
查看次数: |
1258 次 |
最近记录: |