我一直在玩SCNNode对象一段时间了,我迷失了Pivot。如何更改SCNNode的枢轴(SCNBox作为条形图)并将枢轴放在条形边缘之一上?
答案 0 :(得分:14)
节点pivot
是变换矩阵,其反转在其transform
属性生效之前应用于节点。例如,从Xcode中的默认SceneKit游戏模板看一下这个位:
let boxNode = SCNNode()
boxNode.geometry = SCNBox(width: 1, height: 1, length: 1, chamferRadius: 0.02)
如果您设置了boxNode
' position
,那么该点对应于多维数据集的中心,如果您旋转它(就像动画中的模板一样),它会旋转围绕它的中心。
要更改定位点,请将pivot
设置为平移变换:
boxNode.pivot = SCNMatrix4MakeTranslation(0.5, 0.5, 0.5)
现在,当您设置position
该点对应于多维数据集的右上角时,并且当您旋转多维数据集时,它会围绕该角旋转。
更一般地,枢轴相对于节点自身的变换转换节点的内容。假设您想要模拟地球旋转轴的precession。您可以通过创建两个动画来完成此操作:一个动画pivot
动画绕自己的Y轴旋转节点,另一个动画rotation
动画相对于包含节点的空间移动轴。
答案 1 :(得分:4)
关于透视主题:
万一你没有几何体/节点的尺寸,这样的东西可能会有所帮助(特别是对于SCNText)。
var minVec = SCNVector3Zero
var maxVec = SCNVector3Zero
if node.getBoundingBoxMin(&minVec, max: &maxVec) {
let bound = SCNVector3(x: maxVec.x - minVec.x,
y: maxVec.y - minVec.y,
z: maxVec.z - minVec.z)
node.pivot = SCNMatrix4MakeTranslation(bound.x / 2,
bound.y / 2,
bound.z / 2)
}