我正在尝试新的ARKit来取代我的另一个类似的解决方案.真是太棒了!但我似乎无法弄清楚如何以编程方式移动ARAnchor.我想慢慢将锚点移动到用户的左侧.
将锚点创建在用户面前2米处:
var translation = matrix_identity_float4x4
translation.columns.3.z = -2.0
let transform = simd_mul(currentFrame.camera.transform, translation)
let anchor = ARAnchor(transform: transform)
sceneView.session.add(anchor: anchor)
Run Code Online (Sandbox Code Playgroud)
之后,将对象移动到用户的左/右(x轴)...
anchor.transform.columns.3.x = anchor.transform.columns.3.x + 0.1
Run Code Online (Sandbox Code Playgroud)
每50毫秒(或其他)重复一次.
上述方法不起作用,因为transform是一个get-only属性.
我需要一种方法来改变空间中AR对象相对于用户的位置,以保持AR体验不变 - 这意味着,如果移动设备,AR对象将会移动但也不会被卡住"就像它只是画上相机一样,但移动就像你在走路时会看到一个人移动 - 它们正在移动,你正在移动它看起来很自然.
请注意,此问题的范围仅涉及如何在空间中移动与用户相关的对象(ARAnchor),而不是与平面(ARPlaneAnchor)或另一个检测到的表面(ARHitTestResult)相关.
谢谢!
我正在尝试按照此答案访问内在矩阵。
通过运行下面的命令,我获得了一个 48 字节的AnyObject,并进一步将其转换为CFData。
let camData = CMGetAttachment(sampleBuffer, kCMSampleBufferAttachmentKey_CameraIntrinsicMatrix, nil)
Run Code Online (Sandbox Code Playgroud)
但是,我检查了sampleBuffer的输出CMSampleBuffer.h
:
/*! @constant kCMSampleBufferAttachmentKey_CameraIntrinsicMatrix
@abstract Indicates the 3x3 camera intrinsic matrix applied to the current sample buffer.
@discussion Camera intrinsic matrix is a CFData containing a matrix_float3x3, which is column-major.
....
*/
CM_EXPORT const CFStringRef kCMSampleBufferAttachmentKey_CameraIntrinsicMatrix // CFData (matrix_float3x3) __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_11_0);
Run Code Online (Sandbox Code Playgroud)
matrix_float3x3
我应该如何访问from中的值CFData
?
我正在寻找与我在 iOS 设备上拍摄的照片相关的镜头畸变系数(注意:不是焦距也不是主点)。据我了解,在 iOS 设备上执行此操作的唯一方法是使用AVCameraCalibrationData
. 官方文档仅提供有关如何从 检索相机校准数据的信息AVDepthData
,但文档和此 StackOverflow 答案都暗示AVCameraCalibrationData
可以与图像一起使用,而不仅仅是深度数据。
AVCameraCalibrationData
拍摄图像时是否可以检索信息?如果是这样,是否有有关此功能的文档?