发布于 2021-07-06 16:39:27
我终于想出了投影矩阵的正确调整--遵循数学是相当混乱的,因为它是一个4x4矩阵,而不是普通相机投影矩阵所使用的3x4或4x3,这使得计算出它是期望行向量还是列向量特别令人困惑。
无论如何,正确的元素是y轴的.m32。
let camera = SCNNode()
camera.camera = SCNCamera()
let yShift: CGFloat = 1.0
camera.camera!.projectionTransform.m32 = yShift.m31大概会在x轴上移动,但我必须承认,我还没有测试过这个。
当我再想一想的时候,我也意识到我真正想要的效果也包括移动相机。调整.m32模拟移动传感器,这将似乎移动的对象相对于相机,就像你有一个广角镜头,你在移动的作物。为了保持主体中心的框架,你需要移动相机的位置也。
在这篇博客文章 (特别是这段代码 )的一点(大量)帮助下,我也实现了这一点:
let distance: CGFloat = 1.0 // calculate distance from subject here
let fovRadians = camera.camera!.fieldOfView * CGFloat.pi / 180.0
let yAdjust = tan(fovRadians / 2) * distance * yShift
camera.position = camera.position - camera.worldUp * yAdjust(任何感兴趣的读者都可能从上面的源算出x轴的偏移量)
发布于 2021-07-05 17:25:34
在SCNCamera上没有现成的API可以做到这一点。正如您所猜测的,必须创建一个自定义投影矩阵并将其设置为projectionTransform属性。
https://stackoverflow.com/questions/68259301
复制相似问题