SCNNode边界大小和缩放

时间:2016-02-09 20:07:55

标签: ios scenekit

我试图在屏幕上获取节点的大小。这是代码:

var v1 = SCNVector3(x:0, y:0, z:0)
var v2 = SCNVector3(x:0, y:0, z:0)
carNode.getBoundingBoxMin(&v1, max: &v2)
print(v2)

carNode.scale = SCNVector3(0.9, 1.2, 0.5)
//carNode.transform = SCNMatrix4MakeScale(0.9, 1.2, 0.5)

carNode.getBoundingBoxMin(&v1, max: &v2)
print(v2)

然而,getBoundingBoxMin在之前和之后返回的值是相同的,就好像没有考虑缩放一样。这是为什么?我需要此信息来为节点上的物理主体设置正确的大小以进行冲突检测,并确定其他节点是否在距离对象的某个范围内。

1 个答案:

答案 0 :(得分:6)

SCNBoundingVolume Protocol Reference:

  

SCNBoundingVolume协议的...方法测量对象局部坐标空间中对象的位置和大小,表示为方框或球体。

缩放节点不会更改其本地坐标空间。所以你得到了正确的结果。

但您可能不需要做任何事情。请注意SCNPhysicsShapeScaleKey文档下的SCNPhysicsShape类参考:

  

SceneKit的物理模拟忽略了模拟碰撞时包含物理实体的节点的比例属性。相反,使用此选项可在创建自定义物理形状时提供比例因子。 (如果为节点创建物理主体而未指定自定义形状,则SceneKit使用节点的scale属性在创建时推断此比例因子。)

因此,如果您的比例因子未自动应用,则显示(我尚未对其进行测试)将您的比例向量传递给SCNPhysicsShape.init(node:options:),使用选项键SCNPhysicsShapeScaleKey,将会执行您的操作想。