首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >隐式动画化SCNNode从一个ARImageAnchor到另一个

隐式动画化SCNNode从一个ARImageAnchor到另一个
EN

Stack Overflow用户
提问于 2022-05-05 18:30:43
回答 1查看 41关注 0票数 0

我试图使我的AR体验更加友好的用户。

我有一个SCNnode (objectNodeToPlace),每当摄像机检测到imageReference时,我都希望放置在渲染器创建/更新的节点上:

代码语言:javascript
复制
class ViewController: UIViewController, ARSCNViewDelegate {
var objectNodeToPlace: SCNNode
...

func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
                    guard let imageAnchor = anchor as? ARImageAnchor else { return }
          placeObject(object: objectNodeToPlace, at: node, ...)
    }
}

func renderer(_ renderer: SCNSceneRenderer, didUpdate node: SCNNode, for anchor: ARAnchor) {
                    guard let imageAnchor = anchor as? ARImageAnchor else { return }
          placeObject(object: objectNodeToPlace, at: node, ...)
    }
}

我的placeObject函数非常简单,我只是改变了“objectNodeToPlace”的方向:

代码语言:javascript
复制
private func placeObject(object objectNodeToPlace: SCNNode, at node: SCNNode, ...) {
    ...
    node.addChildNode(objectNodeToPlace)
}

一切正常,我的对象总是放在最新检测到的imageReference上。

但是当我的对象被放置到一个图像上并且检测到一个新的图像时,对象跳到最新的上,它不是很棒,非常紧张/不稳定。

我的目标是使这一过渡更加顺利。

我现在拥有的

下面是它现在看起来的严肃性:

我现在所拥有的

红色的,imageReference。

我想要的

以下是我想要的:

我想要什么

我所发现的

我已经找到了这个包,SceneKit Bezier动画,动画之间的运动2分,但我看起来有点过分,因为我想要。

我还读过这个主题,SceneKit旋转和动画一个SCNNode,一个响应建议使用CABasicAnimation,另一个建议使用SCNAction

我觉得SCNAction是快速的最好的方式,而不是我想要的那种精确的动画,我不知道我在做什么,所以我很高兴听到更有经验的开发人员的意见。

编辑

我在苹果文档动画SceneKit内容上找到了我正在寻找的东西--它被称为隐式动画,它应该只使用一行代码来确定我的更改的动画持续时间:

代码语言:javascript
复制
SCNTransaction.animationDuration = 1.0

在更改place()函数中节点的欧拉角(谁是“可动的”)之前,我尝试了这一行:

代码语言:javascript
复制
SCNTransaction.animationDuration = 1.0
objectNodeToPlace.eulerAngles.x = radian

但那不起作用。我很确定我只是错过了一件简单的事情,但我在网上找不到例子,甚至在SCNTransaction的文档中也是如此。

有人有主意吗?

EN

回答 1

Stack Overflow用户

发布于 2022-05-17 06:07:42

阿克塞尔

SCNTransaction至少需要三条语句。

代码语言:javascript
复制
SCNTransaction.start()
SCNTransaction.animationDuration = 1.0
//commands
SCNTransaction.commit()

我最近在SceneKit上写了十几篇文章,你可以找到这里

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72132059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档