在ARkit中,如何创建与网格物体相同的物理体?现在我用边界框创建了

问题描述 投票:0回答:2
let physicsShape = SCNPhysicsShape(geometry: cloneNode.geometry!, options: [SCNPhysicsShape.Option.type : SCNPhysicsShape.ShapeType.boundingBox])
let physicsbody = SCNPhysicsBody(type: .dynamic, shape: physicsShape)
physicsbody.isAffectedByGravity = true
physicsbody.angularDamping = 1
cloneNode.physicsBody = physicsbody
sceneView.scene.rootNode.addChildNode(cloneNode)

但是物理体与网格不匹配,因此它悬停在scnfloor上

请帮助我解决问题,我也使用凹面多面体 - 在这种情况下,它创建了精确的形状,但对象不能声明为动态。 ????

ios swift scenekit arkit
2个回答
0
投票

只有当你有一些角顶点没有面或者应用了一些额外的填充时,才会发生这种情况。

您可以通过下面的代码启用Debug Option,并检查边界框是否与物理形状边界匹配。

scnView.debugOptions = SCNDebugOptionShowBoundingBoxes | SCNDebugOptionShowPhysicsFields | SCNDebugOptionShowWireframe;

您也可以使用下面的代码手动为几何设置边界框

SCNVector3 v1=SCNVector3Make(0, 0, 0);
SCNVector3 v2=SCNVector3Make(5, 5, 5);

[boxCharacter setBoundingBoxMin:&v1 max:&v2];

1
投票

感谢您的回答max9xs

swift 4中的答案如下

 boxNode.boundingBox.min = SCNVector3(0.0,0.0,0.0)
 boxNode.boundingBox.max = SCNVector3(1.0,1.0,1.0)

这将改变对象的边界框..

© www.soinside.com 2019 - 2024. All rights reserved.