簡體   English   中英

使用SCNLookAtConstraint的SCNText查找錯誤的方法

[英]SCNText with SCNLookAtConstraint looking the wrong way

我想在iOS中使用SceneKit在我的3D模型旁邊顯示文本。 它必須看起來像2D。 所以文本應始終面向相機,但我旋轉3D模型。 我有一個SCNNodeSCNText幾何,我附加了SCNLookAtConstraint如下所示:

let constraint = SCNLookAtConstraint(target: cameraNode)
constraint.gimbalLockEnabled = true
textNode.constraints = [constraint]

他們似乎面對鏡頭,但只是錯誤的方式! 我看到所有文字都被鏡像了! 此外,有時文本旋轉,我希望它始終水平對齊。 所以這就是我不想要的所有行為。

有人可以幫幫我嗎? 我只想在我的3D對象中有幾個節點之后有一些文本。 我不在乎怎么樣。 如果可以通過一個簡單的UILabel來完成它,那么它並不一定是我所關心的SCNText:很好! 告訴我怎么樣!

從文檔:

當SceneKit評估一個look-at約束時,它會更新受約束節點的transform屬性,以便節點的負z軸指向約束的目標節點。

您可以通過設置節點的pivot或使用中間節點來解決此問題。 該節點將受到約束,並將文本作為子節點(沿y軸旋轉π)

更新

從iOS 11.0開始, SCNLookAtConstraint類公開localFront屬性,該屬性允許您指定不同的前軸。 默認為(0, 0, -1) ,您可以將其更改為(0, 0, 1)以實現您想要的效果。

基於@mnuages響應,將節點的樞軸設置為以下應該可以解決問題。

node.pivot = SCNMatrix4Rotate(node.pivot, Float.pi, 0, 1, 0)

我在iOS11 beta 5,Swift4上遇到了這個問題:

//1. Rotate your `textNode`, and don't add `textNode` into `sceneView`
textNode.eulerAngles = SCNVector3Make(0, .pi, 0)

//2. Create new wrapper node, add `textNode` as a child node
let textWrapperNode = SCNNode()
textWrapperNode.addChildNode(textNode)

//3. Add constraint for wrapper node
let constraint = SCNLookAtConstraint(target: cameraNode)
constraint.gimbalLockEnabled = true
textWrapperNode.constraints = [constraint]

//4. Add wrapper node into `sceneView`
sceneView.scene.rootNode.addChildNode(textNode)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM