【问题标题】:SCNNode Bounding size and ScalingSCNNode 边界大小和缩放
【发布时间】:2016-05-19 23:29:24
【问题描述】:

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

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 之前和之后返回的值是相同的,就好像没有考虑缩放一样。这是为什么?我需要这些信息来为节点上的物理体设置正确的大小以进行碰撞检测,并确定其他节点是否在对象的某个范围内。

【问题讨论】:

    标签: ios scenekit


    【解决方案1】:

    每SCNBoundingVolume Protocol Reference:

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

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

    不过,您可能不需要做任何事情。注意SCNPhysicsShapeScaleKey 文档下(SCNPhysicsShape 类参考下:

    SceneKit 的物理模拟在模拟碰撞时会忽略包含物理体的节点的缩放属性。相反,在创建自定义物理形状时使用此选项提供比例因子。 (如果您为节点创建物理体而不指定自定义形状,SceneKit 会在创建时使用节点的比例属性来推断此比例因子。)

    因此,如果您的比例因子没有自动应用,看起来(我还没有测试过)使用选项键 SCNPhysicsShapeScaleKey 将您的比例向量传递给 SCNPhysicsShape.init(node:options:),将满足您的需求。

    【讨论】:

    • 谢谢,这个解决方案很棒,不知道我能做到。选项:[SCNPhysicsShapeScaleKey: nodeScale]
    • 有没有办法缩放子对象与父对象相同的比例?例如比例为 1,1,1 的 SCNplane,现在我添加 3D 模型,比例为 0.2,0.2,0.2 但仍然比平面大。所以使用 SCNplane 边界框或其他东西,我可以在平面内找到那个 3D 模型吗?提前致谢
    猜你喜欢
    • 2021-01-23
    • 2012-07-01
    • 2018-01-28
    • 1970-01-01
    • 2018-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-05
    相关资源
    最近更新 更多