目標是縮放SCNNode並將其垂直居中放置在其父節點中。SceneKit:垂直中心縮放的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)
該示例看起來不起作用。 'referenceNode'沒有孩子,永遠不會被添加到場景中。由於它沒有孩子,也沒有幾何體,所以0的高度似乎是合理的。 'liveSphere'永遠不會被添加到場景中。 'gridSphere'顯然是在其他地方定義的?請注意,根據https://developer.apple.com/library/ios/documentation/SceneKit/Reference/SCNReferenceNode_Class/「SCNReferenceNode」,其目的是作爲從場景文件加載的其他內容的佔位符。 –
@HalMueller oops刪除了太多代碼以簡化它。重新添加正確的代碼。 – Crashalot
@HalMueller參考節點是WWDC 2015狐狸演示中的狐狸/熊貓,爲簡單起見,此處省略。這些文件是否也會上傳? – Crashalot