gpt4 book ai didi

ios - 围绕自身旋转相机

转载 作者:行者123 更新时间:2023-11-28 15:06:32 24 4
gpt4 key购买 nike

我正在使用两个虚拟操纵杆在场景中移动我的相机。左摇杆控制位置,右摇杆控制旋转。

当使用右摇杆时,相机会旋转,但相机似乎是围绕模型的中心点旋转。

这是我的代码:

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)

关于ios - 围绕自身旋转相机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48387408/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com