如何在 SceneKit Editor 中使模型的枢轴点居中
How to Center the Pivot Point of a Model in SceneKit Editor
有没有办法让模型的轴心居中?目前(默认情况下)它设置在左下角。我想设置到中心。我怎样才能做到这一点?
图片如下:
更新:我添加了另一个节点并将椅子添加为子节点。
所以,现在效果更好了,但它不会一直旋转,如果我继续旋转,它会重置位置。这是平移操作的代码:
@objc func panned(recognizer :UIPanGestureRecognizer) {
var newAngleY :Float = 0.0
if recognizer.state == .changed {
let sceneView = recognizer.view as! ARSCNView
let touchPoint = recognizer.location(in: sceneView)
let translation = recognizer.translation(in: sceneView)
print(translation.x)
let scnHitTestResults = self.sceneView.hitTest(touchPoint, options: nil)
if let hitTestResult = scnHitTestResults.first {
if let parentNode = hitTestResult.node.parent {
newAngleY = (Float)(translation.x)*(Float)(Double.pi)/180
newAngleY += currentAngleY
parentNode.eulerAngles.y = newAngleY
}
}
}
else if recognizer.state == .ended {
currentAngleY = newAngleY
}
}
您可以使用 SCNNode (Apple Documentation)
的 pivot
属性 更改椅子的枢轴
您可以使用 SCNMatrix4MakeTranslation
更改此设置,例如:
nodeToAdd.pivot = SCNMatrix4MakeTranslation(0,0,0)
这可能会解决问题:
//1. Get The Bounding Box Of The Node
let minimum = float3(nodeToAdd.boundingBox.min)
let maximum = float3(nodeToAdd.boundingBox.max)
//2. Set The Translation To Be Half Way Between The Vector
let translation = (maximum + minimum) * 0.5
//3. Set The Pivot
nodeToAdd.pivot = SCNMatrix4MakeTranslation(translation.x, translation.y, translation.z)
您也可以在 Blender
或 Maya
等程序中更改它。
或者,可能更容易,是在 SceneKit Editor
本身中编辑模型。
如果您无法修复它的支点,那么您可以做的是创建一个 Empty Node
,然后将椅子添加为它的子项,确保它在其中居中。
例如,这样您应该能够更准确地变换它的旋转。
有没有办法让模型的轴心居中?目前(默认情况下)它设置在左下角。我想设置到中心。我怎样才能做到这一点?
图片如下:
更新:我添加了另一个节点并将椅子添加为子节点。
所以,现在效果更好了,但它不会一直旋转,如果我继续旋转,它会重置位置。这是平移操作的代码:
@objc func panned(recognizer :UIPanGestureRecognizer) {
var newAngleY :Float = 0.0
if recognizer.state == .changed {
let sceneView = recognizer.view as! ARSCNView
let touchPoint = recognizer.location(in: sceneView)
let translation = recognizer.translation(in: sceneView)
print(translation.x)
let scnHitTestResults = self.sceneView.hitTest(touchPoint, options: nil)
if let hitTestResult = scnHitTestResults.first {
if let parentNode = hitTestResult.node.parent {
newAngleY = (Float)(translation.x)*(Float)(Double.pi)/180
newAngleY += currentAngleY
parentNode.eulerAngles.y = newAngleY
}
}
}
else if recognizer.state == .ended {
currentAngleY = newAngleY
}
}
您可以使用 SCNNode (Apple Documentation)
的pivot
属性 更改椅子的枢轴
您可以使用 SCNMatrix4MakeTranslation
更改此设置,例如:
nodeToAdd.pivot = SCNMatrix4MakeTranslation(0,0,0)
这可能会解决问题:
//1. Get The Bounding Box Of The Node
let minimum = float3(nodeToAdd.boundingBox.min)
let maximum = float3(nodeToAdd.boundingBox.max)
//2. Set The Translation To Be Half Way Between The Vector
let translation = (maximum + minimum) * 0.5
//3. Set The Pivot
nodeToAdd.pivot = SCNMatrix4MakeTranslation(translation.x, translation.y, translation.z)
您也可以在 Blender
或 Maya
等程序中更改它。
或者,可能更容易,是在 SceneKit Editor
本身中编辑模型。
如果您无法修复它的支点,那么您可以做的是创建一个 Empty Node
,然后将椅子添加为它的子项,确保它在其中居中。
例如,这样您应该能够更准确地变换它的旋转。