物体方向的光滑插值跟踪相机

weixin_38078242 2019-09-12 04:01:01

我有一个SCNNode表示玩家在第一人称游戏中使用的物品(使用ARKit)。 我将节点制作为摄像机的子节点,以便它总是在观看者的前方漂浮很短的距离。但是这个简单的设置使得物品非常静止,只是粘在屏幕上。 更为现实的是,如果我在我面前拿着一个物体,然后转向另一个方向,我的手部运动会滞后我的头部。如果我把头向上或向下倾斜,我对物体的视角也会略有变化。 我怎么能在SceneKit中模拟这个? This question对于延迟追逐节点并且可能反向工作的摄像机有一些想法。对于倾斜,也许我不得不考虑加速度计,但限制它,以便您不能太多地旋转对象。






...全文
22 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38090265 2019-09-12
  • 打赏
  • 举报
回复

而不是使物品成为照相机的一个孩子,我做了一个名为arms的新的不可见节点的孩子。该arms节点不是相机的一个孩子,但我用了一个SCNTransformConstraint来约束它的转型,就像这样: // ~~ Not the final code ~~ Do not use ~~ // Set up the viewer's "arms" to follow the camera using a dampened constraint arms = SCNNode() let armconstraint = SCNTransformConstraint.init(inWorldSpace: false) { (node: SCNNode, _) -> SCNMatrix4 in // Bind the arm's transformation to the camera's return self.sceneView.pointOfView!.convertTransform(SCNMatrix4Identity, to: node) } armconstraint.influenceFactor = 0.5 arms!.constraints = [ armconstraint ] sceneView.scene.rootNode.addChildNode(arms!) 使用低influenceFactor使得arms没有刚性在镜头前举行的想法,但稍微延迟一下。 这工作得很好;它可能明显不稳定。所以我尝试将它分成两个单独的约束:一个SCNDistanceConstraint,它保持相机和arms之间的距离为0,SCNTransformConstraint同步arms的方向,但不是它的位置。 我发现那是什么,而距离约束是完美无瑕的,使用上的定向分数influenceFactor造成arms去疯抢,在屏幕上疯狂地旋转!如果是1.0那么arms节点严格遵循相机,但不会出现毛刺。 原来的SCNConstraint.influenceFactor文档中,它说: 这个属性对SCNTransformConstraint对象没有影响。 咦,我不知道为什么,一个节点的transform,position,并orientation是动画看起来是这样的,他们能顺利插值没有问题。 原来有一种叫做Slerp的技术,它是一种在四元数之间插值的方法。因此,而不是使用influenceFactor,每次调用我的SCNTransformConstraint时,我都可以在当前位置arms和相机的位置之间进行插值。这是可以接受的顺利。

435

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧