gpt4 book ai didi

swift - Tube Physics Body 表现得像 SCNCylinder,但如何让它表现得像 SCNTube?

转载 作者:可可西里 更新时间:2023-11-01 00:53:34 26 4
gpt4 key购买 nike

我正在尝试在 SceneKit 中制作一个 pipe 及其物理体。

let BoxGeometry = SCNTube(innerRadius: 5, outerRadius: 12.5, height: 4)
Box = SCNNode(geometry: BoxGeometry)
Box.pivot = SCNMatrix4MakeRotation(Float(M_PI_2/8), 0, 1, 0)
Box.physicsBody = SCNPhysicsBody(type: SCNPhysicsBodyType.Static, shape: nil)
Box.physicsBody?.mass = 5
Box.categoryBitMask = colorCategory
scene.rootNode.addChildNode(Box)

但是,当另一个物体落到这个物体上时,它不会通过中心。相反,它看起来像是悬浮在空中。它表现得就像物理体是一个完整的圆柱体,而不是中间有孔的 pipe 。我该如何解决这个问题,以便物体可以通过中心? pipe 外观符合预期。

谢谢!

最佳答案

SceneKit 中的动态物体必须是凸的。 (如果你研究游戏中碰撞检测背后的一般理论,即不仅仅是 SceneKit,你会发现凸形和凹形的碰撞检测在速度和效率上存在巨大差异。)管是凹形 - 它有一个洞。

幸运的是,您的 pipe 被用作静态物体。仅对于静态物体,可以选择使物理形状(近似)成为凹形几何体:

let shape = SCNPhysicsShape(geometry: tube, 
options: [SCNPhysicsShapeTypeKey: SCNPhysicsShapeTypeConcavePolyhedron])
box.physicsBody = SCNPhysicsBody(type: .Static, shape: shape)

这会产生性能成本。如果您发现此更改后您的帧率受到 CPU 使用率的限制,或者如果您想让动态主体(有效地)凹陷,您可能会通过制作一个由多个其他形状组成的物理形状来获得更好的性能 - 例如构建一个虚拟节点层次结构(不是您场景中实际存在的层次结构),其中包含排列成环状的一堆圆柱体或盒子,然后使用 SCNPhycsicsShape(node:options:) 从它们制裁剪理形状。

关于swift - Tube Physics Body 表现得像 SCNCylinder,但如何让它表现得像 SCNTube?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27391763/

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