gpt4 book ai didi

ios - 为什么 SCNNode.presentation.position 相对较慢,有解决方法吗?

转载 作者:可可西里 更新时间:2023-11-01 04:54:59 26 4
gpt4 key购买 nike

我将我的 SceneKit 应用程序中的一个主要性能瓶颈追溯到运行了数千次的嵌套循环。在那个循环中,除了这一行之外,还有一堆代码可以非常愉快地缩放:

var scenePos = presentation.position

它比仅询问位置慢 100 多倍,再加上我在同一个循环中进行的许多其他计算、比较、数组查找和方法调用的组合。令我惊讶的是,我能找到的似乎还没有人对此发表评论。

为什么会这样,除了复制每个节点的 presentation.position 之外,是否有解决方法?在每一帧中自己定位,这样您就不必一直向 presentation 节点询问它了?谢谢。

编辑:presentation.position 只被读取,从未被写入。没有边界框被编辑过。我为一些 SCNNode 使用动态 SCNPhysicsBody,但绝大多数是静态的。

最佳答案

这是我目前正在使用的解决方法(为此,还有一个单独的问题,即如果从未为该节点运行物理,则 presentation.position 可以为零)。它快了几个数量级,因为我几乎所有的节点都不是动态的。

// When you're not sure if physics has first run yet
func currentScenePos() -> SCNVector3 {
if physicsBody?.type == .dynamic {
var scenePos = presentation.position
if scenePos.isZero() {
// Looks like the physics hasn't run on this node yet. Use the regular position.
// If that's zero too, it must really be at the scene origin.
scenePos = position
}
return scenePos
} else {
// Non-dynamic physics. Just use position, it's a lot faster.
return position
}
}

关于ios - 为什么 SCNNode.presentation.position 相对较慢,有解决方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54606883/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com