我想在iOS中使用SceneKit在我的3D模型旁边显示文字。它必须看起来像2D。所以文本应始终面向相机,但我旋转3D模型。我有SCNNode
SCNText
几何图形,我附上了SCNLookAtConstraint
,如下所示:
let constraint = SCNLookAtConstraint(target: cameraNode)
constraint.gimbalLockEnabled = true
textNode.constraints = [constraint]
他们似乎面对镜头,但只是错误的方式!我看到所有文字都被镜像了!此外,有时文本旋转,我希望它始终水平对齐。所以这就是我不想要的所有行为。
有人可以帮助我吗?我只想在我的3D对象中有几个节点之后有一些文本。我不在乎怎么样。如果可以通过一个简单的UILabel来完成它,那么它并不一定是我所关心的SCNText:很好!告诉我怎么做!
答案 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)