菜鸟教程小白 发表于 2022-12-13 05:23:12

ios - 在 ARKit 中获取设备绕世界原点 y 轴的旋转


                                            <p><p>当我在 ARKit 中绕 y 轴旋转我的设备时,我试图计算它的旋转。为澄清起见,ARKit 中的 y 轴是垂直于地面向上指向的轴。 </p>

<p>我使用 eulerangles 来获得这样的相机旋转:</p>

<pre><code>var alpha = sceneView.pointOfView?.eulerAngles.y
</code></pre>

<p>这在 <code>0=<alpha<pi/2 和 -pi/2<alpha<=0</code> 时大致有效,但是对于应该是其他角度的情况,我得到了错误的读数。我怀疑这与万向节锁定有关,并且我必须以某种方式使用四元数才能获得正确的角度,而不管象限如何。非常感谢任何帮助!</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>通过使用四元数而不是 eulerangles 解决了这个问题。这是我使用的代码:</p>

<pre><code>guard let cameraNode = sceneView.pointOfView else { return }

//Get camera orientation expressed as a quaternion
let q = cameraNode.orientation

//Calculate rotation around y-axis (heading) from quaternion and convert angle so that
//0 is along -z-axis (forward in SceneKit) and positive angle is clockwise rotation.
let alpha = Float.pi - atan2f( (2*q.y*q.w)-(2*q.x*q.z), 1-(2*pow(q.y,2))-(2*pow(q.z,2)) )
</code></pre>

<p>我使用了 <a href="http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToEuler/index.htm" rel="noreferrer noopener nofollow">this website</a> 中列出的四元数到标题/欧拉转换. </p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 在 ARKit 中获取设备绕世界原点 y 轴的旋转,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/54893331/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/54893331/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 在 ARKit 中获取设备绕世界原点 y 轴的旋转