使用SCNLookAtConstraint的SCNText查找错误的方法

时间:2015-03-06 23:22:29

标签: ios text scenekit

我想在iOS中使用SceneKit在我的3D模型旁边显示文字。它必须看起来像2D。所以文本应始终面向相机,但我旋转3D模型。我有SCNNode SCNText几何图形,我附上了SCNLookAtConstraint,如下所示:

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

他们似乎面对镜头,但只是错误的方式!我看到所有文字都被镜像了!此外,有时文本旋转,我希望它始终水平对齐。所以这就是我不想要的所有行为。

有人可以帮助我吗?我只想在我的3D对象中有几个节点之后有一些文本。我不在乎怎么样。如果可以通过一个简单的UILabel来完成它,那么它并不一定是我所关心的SCNText:很好!告诉我怎么做!

3 个答案:

答案 0 :(得分:7)

来自文档:

  

当SceneKit评估一个look-at约束时,它会更新受约束节点的transform属性,以便节点的负z轴指向约束的目标节点。

您可以通过设置节点的pivot或使用中间节点来解决此问题。该节点将受到约束,并将文本作为子节点(沿着 y 轴旋转π)

<强>更新

启动iOS 11.0时,SCNLookAtConstraint类会公开localFront属性,该属性允许您指定不同的前轴。默认为(0, 0, -1),您可以将其更改为(0, 0, 1)以实现您的目标。

答案 1 :(得分:3)

根据@mnuages响应,将节点的数据透视设置为以下内容应该可以解决问题。

private Parent createGridLayout(XYChart chart1, XYChart chart2) { GridPane gridPane = new GridPane(); gridPane.add(chart1, 0, 0); gridPane.add(chart2, 0, 1); RowConstraints top = new RowConstraints(); top.setPercentHeight(100.0 / 3.0); RowConstraints bottom = new RowConstraints(); bottom.setPercentHeight(200.0 / 3.0); gridPane.getRowConstraints().addAll(top, bottom); ColumnConstraints cc = new ColumnConstraints(); cc.setHgrow(Priority.ALWAYS); gridPane.getColumnConstraints().add(cc); return gridPane; }

答案 2 :(得分: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)