Ios 将相机绕自身旋转
我使用两个虚拟操纵杆在场景中移动相机。左斗杆控制位置,右斗杆控制旋转 使用右斗杆时,摄影机会旋转,但摄影机似乎围绕模型的中心点旋转 这是我的代码:Ios 将相机绕自身旋转,ios,swift,scenekit,Ios,Swift,Scenekit,我使用两个虚拟操纵杆在场景中移动相机。左斗杆控制位置,右斗杆控制旋转 使用右斗杆时,摄影机会旋转,但摄影机似乎围绕模型的中心点旋转 这是我的代码: fileprivate func rotateCamera(_ x: Float, _ y: Float) { if let cameraNode = self.cameraNode { let moveX = x / 50.0 let rotated = SCNMatrix4Rotate(camer
fileprivate func rotateCamera(_ x: Float, _ y: Float)
{
if let cameraNode = self.cameraNode
{
let moveX = x / 50.0
let rotated = SCNMatrix4Rotate(cameraNode.transform, moveX, 0, 1, 0)
cameraNode.transform = rotated
}
}
我还尝试了以下代码:
fileprivate func rotateCamera(_ x: Float, _ y: Float)
{
if let cameraNode = self.cameraNode
{
let moveX = x / 50.0
cameraNode.rotate(by: SCNQuaternion(moveX, 0, 1, 0), aroundTarget: cameraNode.transform)
}
}
但摄像机只是在四处跳跃。我这里的错误是什么?处理旋转的方法有很多种,有些方法非常适合给编码器带来麻烦 这听起来像模型在0,0,0,这意味着它在世界的中心,相机被转换到某个位置。在第一个使用矩阵的示例中,基本上旋转该变换。因此,首先变换,然后旋转,如果是,将使其围绕原点(0,0,0)旋转 相反,要在局部空间中旋转摄影机,应先在局部空间中旋转摄影机,然后将其平移到其在世界空间中的位置 平移x旋转矩阵导致世界空间中的旋转 旋转x平移矩阵导致局部空间中的旋转 因此,解决方案是首先从摄影机中移除平移(将其移回0,0,0),然后应用旋转矩阵,然后重新应用平移。这可以归结为与从一个单位矩阵开始相同的结果。例如:
let rotated = SCNMatrix4Rotate(SCNMatrixIdentity, moveX, 0, 1, 0)
cameraNode.transform = SCNMatrix4Multiply(rotated, cameraNode.transform)