Ios 如何在SceneKit编辑器中居中模型的轴心点
模型的轴心是否仍要居中?当前(默认情况下)设置为左下角。我想调到中间。我该怎么做 图为: 更新:我添加了另一个节点,并将椅子作为孩子添加 所以,现在它工作得更好了,但它不会一直旋转,如果我继续旋转,它会重置位置。以下是平移操作的代码:Ios 如何在SceneKit编辑器中居中模型的轴心点,ios,scenekit,arkit,Ios,Scenekit,Arkit,模型的轴心是否仍要居中?当前(默认情况下)设置为左下角。我想调到中间。我该怎么做 图为: 更新:我添加了另一个节点,并将椅子作为孩子添加 所以,现在它工作得更好了,但它不会一直旋转,如果我继续旋转,它会重置位置。以下是平移操作的代码: @objc func panned(recognizer :UIPanGestureRecognizer) { var newAngleY :Float = 0.0 if recognizer.state == .chan
@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()的
pivot
属性更改椅子的枢轴
您可以使用SCNMATRIX4MAKETRANSACTION
更改此设置,例如:
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
或者,在场景编辑器
中编辑模型可能更容易
如果无法修复其轴,则可以创建一个空节点
,然后将椅子添加为该节点的子节点,确保椅子位于该节点的中心
通过这种方式,您应该能够更准确地变换它的旋转。例如,您可以使用SCNNode()的
pivot
属性更改椅子的枢轴
您可以使用SCNMATRIX4MAKETRANSACTION
更改此设置,例如:
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
或者,在场景编辑器
中编辑模型可能更容易
如果无法修复其轴,则可以创建一个空节点
,然后将椅子添加为该节点的子节点,确保椅子位于该节点的中心
通过这种方式,您应该能够更准确地变换其旋转方向。谢谢!我使用了最后一种方法,但由于某种原因,旋转仍然是有问题的。即使我正在旋转parentNode而不是chair节点,它仍然会引起问题。也许这是模型本身的问题。我使用了上面的代码,但它没有按预期工作。椅子会旋转,但仍在使用原始坐标系旋转。我认为这个模型有问题。更新了这个问题,取得了更大的进展。您是否尝试过删除var newAngleY:Float=0.0,并将其设置在这里:var newAngleY=(Float)(translation.x)*(Float)(Double.pi)/180谢谢Josh!就这样:)谢谢!我使用了最后一种方法,但由于某种原因,旋转仍然是有问题的。即使我正在旋转parentNode而不是chair节点,它仍然会引起问题。也许这是模型本身的问题。我使用了上面的代码,但它没有按预期工作。椅子会旋转,但仍在使用原始坐标系旋转。我认为这个模型有问题。更新了这个问题,取得了更大的进展。您是否尝试过删除var newAngleY:Float=0.0,并将其设置在这里:var newAngleY=(Float)(translation.x)*(Float)(Double.pi)/180谢谢Josh!就这样:)