首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用完成处理程序将某些更改应用于SCNNode

如何使用完成处理程序将某些更改应用于SCNNode
EN

Stack Overflow用户
提问于 2019-11-27 14:08:43
回答 1查看 115关注 0票数 0

基本上,我想将一些更改应用到SCNNode (例如,更改morpher.weights或更改骨架转换)并在此之后呈现场景。

代码语言:javascript
复制
scnRenderer.scene = sceneView?.scene
scnRenderer.pointOfView = sceneView?.pointOfView
scnRenderer.sceneTime = 1
scnRenderer.render(atTime: 0, viewport: viewport, commandBuffer: commandBuffer, passDescriptor:
                currentPassDescriptor)
commandBuffer.addCompletedHandler { (buffer) in
    animateNextStep?()
}
commandBuffer.commit()

我想为整个动画制作它。伪码看起来像:

代码语言:javascript
复制
func animateNextStep() { //will be called in render function after rendering
    guard step < count else { return }

    step += 1
    node.applySomeChanges()
    render()
}

目前,80%的图像是好的,包含模型,正确的骨骼位置和正确的莫费尔权值,20%不是(看起来是用以前的值渲染)。在将更改应用到节点之后,我需要一些完成处理程序。

我可以用DispathQueue.main.asyncAfter包装渲染,但我认为应该有一些好的解决方案。

怎么做才对?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-27 14:23:52

这可能是交易的一个问题,但是如果没有更多的上下文就很难说了。

applySomeChanges中,您可以尝试使用显式事务

代码语言:javascript
复制
[SCNTransaction begin];
[SCNTransaction setAnimationDuration:0];

// changes to SceneKit objects

[SCNTransaction commit];

您还可以尝试在[SCNTransaction flush];方法的开头调用render

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

https://stackoverflow.com/questions/59072033

复制
相关文章

相似问题

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