如果形状复杂,SCNPhysicsHingeJoint 不旋转

Posted

技术标签:

【中文标题】如果形状复杂,SCNPhysicsHingeJoint 不旋转【英文标题】:SCNPhysicsHingeJoint not rotating if shape is complex 【发布时间】:2014-12-29 22:49:34 【问题描述】:

我在 SceneKit 中发现 collada 对象的联合旋转有一个奇怪的行为。

想象一下,我用这段代码制作旋转桌(cheeta3d 制作的复杂表格桌):

SCNScene *heroScene = [SCNScene sceneNamed:@"scene.dae"];
b = [heroScene.rootNode childNodeWithName:@"desk" recursively:YES];
b.physicsBody = [SCNPhysicsBody dynamicBody];
b.physicsBody.physicsShape=[SCNPhysicsShape shapeWithNode:b options:@SCNPhysicsShapeTypeKey:SCNPhysicsShapeTypeConcavePolyhedron,SCNPhysicsShapeKeepAsCompoundKey:@YES]; //**HERE we need YES only, if NO it is not rotating**!
[scene.rootNode addChildNode:b];
SCNPhysicsHingeJoint *joint = [SCNPhysicsHingeJoint jointWithBody:b.physicsBody axis:SCNVector3Make(0,1,0) anchor:SCNVector3Make(0,5,0)];
[scene.physicsWorld addBehavior:joint];

看评论 //这里我们只需要 YES,如果 NO 它不旋转

我测试了所有案例,所有关节。 SCNPhysicsShapeKeepAsCompoundKey 必须为 YES,尽管我认为这里并不那么重要。

为什么会这样?

【问题讨论】:

【参考方案1】:

SCNPhysicsShapeKeepAsCompoundKey 默认为 YES。据我所知,这会关闭物理对象的“flattenedCone”版本。当铰链接头仅连接到模型的一个部分而不是整个物体时,您的模型中很可能有一些东西阻止它旋转。

【讨论】:

这很有趣,但是在 ios9.new 中(现在,在问题发生一年后)没有物体旋转,独立于 YES 或 NO :-( 找不到原因。不想改造模型 啊,有趣的是:苹果说:“这种形状类型 [SCNPhysicsShapeTypeKey:SCNPhysicsShapeTypeConcavePolyhedron] 只能用于静态物理体。”所以在旋转之前只是一个错误

以上是关于如果形状复杂,SCNPhysicsHingeJoint 不旋转的主要内容,如果未能解决你的问题,请参考以下文章

WPF复杂形状按钮

复杂形状的碰撞检测

复杂形状的碰撞检测

在 ASP.NET 中以前制作但复杂的形状上裁剪图片

使用几何形状作为组件

DTO 形状:扁平、复杂/嵌套或两者的混合