当前位置:  开发笔记 > 编程语言 > 正文

如何确定ScnNode是否在SceneKit中的摄像机节点的视图方向的左侧或右侧

如何解决《如何确定ScnNode是否在SceneKit中的摄像机节点的视图方向的左侧或右侧》经验,为你挑选了1个好方法。



1> Luke Van In..:

    计算相对于摄像机的节点向量.通过从节点位置减去摄像机位置来计算矢量

    使用atan2将矢量转换为角度.Apple的文档在解释上有点薄弱.有关raywenderlich.com的教程.

例如

let v = CGPoint(x: nodePosition.x - cameraPosition.x, y: nodePosition.y - cameraPosition.y);
let a = atan2(v.y, v.x) // Note: order of arguments

角度以弧度为单位,范围介于-π和π(-180到180度)之间.如果值为负,则节点位于摄像机矢量的左侧,正值表示节点位于右侧,零值表示节点位于正前方.

方便的是,您可以根据需要使用此角度实际执行旋转.只需将摄像机角度增加一定角度即可达到节点.

例如

cameraRotation += a * 0.1

注意事项:

"前进"或"上"不一定与内部坐标系相同.通常0在右侧,因此如果您想要显示箭头或其他UI,您可能需要从角度添加或减去一定量(通常 - (π/ 2)旋转四分之一圈).

角度将始终仅在-π和+π之间.如果节点恰好落在摄像机后面(恰好是180度),你将得到-π或+π,当节点越过这个不连续点时,你可能会看到这两个极端之间的角度跳跃.你有时会在游戏中看到这种副作用,导航箭头指向目标,然后突然轻弹到屏幕的另一侧.有各种方法来处理这个问题.一种简单的方法是在角度上使用低通滤波器(即随时间累积多个样本).

推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有