目标是缩放 SCNNode 并将其垂直居中于其父级中。
但是,缩放 SCNNode 不会影响其边界框,并且计算缩放高度不起作用。如果没有准确的高度,如何将节点垂直居中于其父节点内?
为了说明使用缩放高度的问题,请参阅附件Tiki.dae。资产的原始高度(如边界框所示)为 324.36。但是,如果将 Y 比例设置为 0.01,则高度不会变为 ~3.24。它变得小于 3,您可以通过将其舒适地安装在高度为 3(半径为 1.5)的球体中来证明这一点。
下面的代码尝试将缩放节点置于其父节点的中心,但它不起作用。
注意:参考节点是来自 WWDC 2015 狐狸演示的狐狸/熊猫参考节点。
// Create reference node
let referenceNode = SCNReferenceNode(URL: referenceURL)
referenceNode?.load()
// Scale reference node
let scale = Float(3)
referenceNode?.scale = SCNVector3(x: scale, y: scale, z: scale)
// Create geometry for sphere
let sphereGeometry = SCNSphere(radius: (gridSphere.geometry as! SCNSphere).radius)
//sphereGeometry.materials = gridSphere.geometry!.materials
sphereGeometry.firstMaterial!.diffuse.contents = gPurpleColor
// Create sphere to hold reference node, position at same place as <gridSphere>
let liveSphere = SCNNode(geometry: sphereGeometry)
liveSphere.position = gridSphere.position
// Center reference node inside <liveSphere>
var min = SCNVector3Zero
var max = SCNVector3Zero
referenceNode?.getBoundingBoxMin(&min, max: &max)
let referenceNodeHeight = max.y - min.y
referenceNode?.position = SCNVector3(x: 0, y: 0 - referenceNodeHeight, z: 0)
// Add reference node to <liveSphere>
liveSphere.addChildNode(referenceNode!)
// This value never changes no matter the scale value???
print(referenceNodeHeight)