首页 > 解决方案 > 对节点组应用旋转有时会翻转节点

问题描述

我试图通过将旋转应用于每个节点来旋转场景中的一组对象。代码的旋转部分很简单:

for node in sceneView.scene.rootNode.childNodes {
    node.localRotate(by: SCNVector4(0,1,0, Double.pi/180))
}

预期的结果是每次触发生成的节点都会旋转 1 度。但是,我注意到有时生成的图像会反转 y 值(例如,旋转向量在前一帧中为 -1,但下一帧突然变为 +1),导致看起来像错觉。频率看起来每隔一帧左右发生一次。我尝试了不同的轴,但同样的事情也会发生。我尝试了localRotate和Rotate,问题仍然存在。这假设会发生吗?

这是演示问题的视频链接: https ://res.cloudinary.com/df7kpyhrg/video/upload/v1616634641/RPReplay_Final1616634008_ohvg1k.mp4

标签: iosswiftarkit

解决方案


我仍然不是 100% 确定,但我认为问题是我需要使用 ar 修改的 simd 版本。我需要使用 simdRotate 而不是旋转。我相信视频中当前的翻转是天使的变化,看起来像反射。举个更清楚的例子,假设当前角度为 0,并且以 0.1 弧度为单位递增,值将是 0、-0.1、0.1、-0.2、0.2 等等。因此翻转结果是要执行的中间结果。这个堆栈溢出帖子很好地解释了 simd 和非 simd 方法之间的区别 SIMD 是什么意思?


推荐阅读