【发布时间】:2018-07-28 19:25:47
【问题描述】:
我正在尝试制作一个应用程序,用户在文本字段中输入一些文本,然后该应用程序在 ar 摄像头前向用户显示此文本。我将文本正确放置在相机前面,并将文本的锚点更改为位于文本的中心。但是当我将文本添加到场景中时,文本会围绕 z 轴旋转 90 度。我知道为什么,但我不知道如何解决它。原因是当设备处于横向时,arscene.session 的相机对所有 x、y、z 的旋转为 0,但由于我希望我的应用程序处于纵向状态,因此我将设备旋转 90 度,从而将相机旋转为好吧,由于文本具有相同的相机旋转,因此它也会旋转。我尝试通过围绕 z 轴再次旋转来纠正文本的旋转,但这并不能解决整个问题,因为当我改变手机的方向时,会影响相机轴,从而影响文本的不同轴(不是同一个轴,因为我在校正步骤中旋转了轴)。所以我认为解决这个问题的唯一方法是从一开始就旋转相机以与肖像模式保持一致,但我还没有找到任何方法来设置相机的旋转 这是添加文本的代码:
private func createTextNode(text:String?)
{
guard let text = text else {return}
let arText = SCNText(string: text, extrusionDepth: 1)
arText.font = UIFont(name: arText.font.fontName, size: 2)
arText.firstMaterial?.diffuse.contents = selectedColor
//making the node
let node = SCNNode()
node.geometry = arText
center(node: node)
guard let currentFrame = sceneView.session.currentFrame else {return}
let camera = currentFrame.camera
let cameraTransform = camera.transform
var newTransform = matrix_identity_float4x4
newTransform.columns.3.z = -0.2
let modifiedTransform = matrix_multiply(cameraTransform, newTransform)
node.transform = SCNMatrix4(modifiedTransform)
node.scale = SCNVector3(0.02, 0.02, 0.02)
self.sceneView.scene.rootNode.addChildNode(node)
node.eulerAngles.x = 90.degrees
}
这就是输出的样子.. output
任何帮助将不胜感激
【问题讨论】: