[英]How can I set the UIImagePickerController orientation for video?
[英]How can I set text orientation in ARKit?
我正在用ARKit創建一個簡單的應用程序,在其中我將一些文本添加到場景中的tapped位置:
@objc func tapped(sender: UITapGestureRecognizer){
let sceneView = sender.view as! ARSCNView
let tapLocation = sender.location(in: sceneView)
let hitTest = sceneView.hitTest(tapLocation, types: .featurePoint)
if !hitTest.isEmpty{
self.addTag(tag: "A", hitTestResult: hitTest.first!)
}
else{
print("no match")
}
}
func addTag(tag: String, hitTestResult: ARHitTestResult){
let tag = SCNText(string:tag, extrusionDepth: 0.1)
tag.font = UIFont(name: "Optima", size: 1)
tag.firstMaterial?.diffuse.contents = UIColor.red
let tagNode = SCNNode(geometry: tag)
let transform = hitTestResult.worldTransform
let thirdColumn = transform.columns.3
tagNode.position = SCNVector3(thirdColumn.x,thirdColumn.y - tagNode.boundingBox.max.y / 2,thirdColumn.z)
print("\(thirdColumn.x) \(thirdColumn.y) \(thirdColumn.z)")
self.sceneView.scene.rootNode.addChildNode(tagNode)
}
它有效,但我對文本的方向有問題。 當我用相機的原始位置添加它時,文本方向正常,我可以正面看到文本(樣本1)。 但是當我向左/向右轉動相機並通過點擊添加文本時,我可以從側面看到添加的文本(示例2)。
樣本1:
樣本2:
我知道應該有一些簡單的技巧來解決它,但作為這個主題的初學者我到目前為止找不到它。
您希望文本始終面向相機嗎? SCNBillboardConstraint
是你的朋友:
tagNode.constraints = [SCNBillboardConstraint()]
我是否正確地說當你點擊(無論你碰巧面對的地方)時你想要文本面對鏡頭,但是然后保持靜止?
有許多方法可以調整任何節點的方向。 對於這種情況,我建議在實例化文本時簡單地將文本節點的eulerAngles
設置為等於攝像機的eulerAngles
。
在addTag()
函數中添加:
let eulerAngles = self.sceneView.session.currentFrame?.camera.eulerAngles
tagNode.eulerAngles = SCNVector3(eulerAngles.x, eulerAngles.y, eulerAngles.z + .pi / 2)
附加的.pi / 2
用於確保文本的方向正確,因為ARKit的默認設置是橫向方向,因此文本很有趣。 這適用於圍繞局部z軸的旋轉。
使用節點的.localRotate()
或訪問其transform
屬性也是合理的(有些人可能認為它更好),但我喜歡直接操縱位置和eulerAngles的方法。
希望這可以幫助。
編輯:用.pi / 2
替換Float(1.57)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.