我需要从最初设置它的sceneView中的位置旋转一个SCNText对象。创建SCNText时,请调整其枢轴点,使其在其中心旋转。问题是在我将其中心移至leftAlignment Point之后。我用红点创建了点
没有下面的代码,它就不能正确旋转(从leftAlignment点开始),如图1所示。有了这个代码,它确实可以正确旋转,但是如图2所示,它的原始位置现在是错误的。
let min = textNode.boundingBox.min
let max = textNode.boundingBox.max
textNode.pivot = SCNMatrix4MakeTranslation(
min.x + (max.x - min.x)/2,
min.y + (max.y - min.y)/2,
min.z + (max.z - min.z)/2
)
我正在寻找第三张照片。 我该如何实现?
代码:
let squareNode = SCNNode()
squareNode ...
squareNode.position = SCNVector3(0.0, 0.6, -0.7)
let material = SCNMaterial()
material.diffuse.contents = UIColor.yellow
let geometry = SCNText(string: "SCNText", extrusionDepth: 0.1)
geometry.flatness = 0
geometry.font = UIFont.systemFont(ofSize: 6.3)
geometry.materials = [material]
let textNode = SCNNode()
textNode.geometry = geometry
textNode.geometry?.firstMaterial?.isDoubleSided = true
// *** code to use its center ***
let min = textNode.boundingBox.min
let max = textNode.boundingBox.max
textNode.pivot = SCNMatrix4MakeTranslation(
min.x + (max.x - min.x)/2,
min.y + (max.y - min.y)/2,
min.z + (max.z - min.z)/2
)
textNode.position = SCNVector3(0.1, 0.55, -0.7)
sceneView.scene.rootNode.addChildNode(textNode)
我还尝试在首次创建textNode时不添加“使用其中心的代码”,而是在respondToSwipeGesture
内部旋转时添加了代码,但是一旦旋转完成,它就结束了/将自己移动到如图2所示的同一leftAlignment角。
func respondToSwipeGesture(recognizer: UIGestureRecognizer) {
case UISwipeGestureRecognizer.Direction.right:
// ...
let node = hitResults.first.node
let rotate = SCNAction.rotateBy(x: 0, y: CGFloat(degToRadians(degrees: -68.5)), z: 0, duration: 0.33)
let min = node.boundingBox.min
let max = node.boundingBox.max
node.pivot = SCNMatrix4MakeTranslation(
min.x + (max.x - min.x)/2,
min.y + (max.y - min.y)/2,
min.z + (max.z - min.z)/2
)
node.runAction(rotate)
}