作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建一个具有多个 SCNText
和 SCNPlane
的 AR 应用程序。我正在尝试将每个 SCNText
放在 SCNPlane
中,但是因为这 figure显示,文本总是在平面之外。
我的问题是如何将每个 SCNText
放在 SCNPlane
中?
这是我的代码部分:
func displayMark() {
var str = ["Orange ","Apple ","Banana ","limon", "onion"]
var x : Float = 1
var i = 0
while i<5 {
let text = SCNText(string: str[i], extrusionDepth: 0)
let material = SCNMaterial()
material.diffuse.contents = UIColor.black
text.materials = [material]
let node = SCNNode()
node.position = SCNVector3(0, x/15 , 0)
node.scale = SCNVector3(0.0009, 0.0009, 0.0009)
let planeNode2 = SCNNode(geometry: text)
node.addChildNode(planeNode2)
let minVec = node.boundingBox.min
let maxVec = node.boundingBox.max
let bound = SCNVector3Make(maxVec.x - minVec.x,
maxVec.y - minVec.y,
maxVec.z - minVec.z);
let plane = SCNPlane(width: CGFloat(bound.x),
height: CGFloat(bound.y))
plane.cornerRadius = 5
plane.firstMaterial?.diffuse.contents = UIColor.gray.withAlphaComponent(0.8)
let planeNode = SCNNode(geometry: plane)
node.addChildNode(planeNode)
planeNode.name = "text"
i = i + 1
x = 1 + x
self.sceneView.scene.rootNode.addChildNode(node)
self.sceneView.autoenablesDefaultLighting = true
}
}
最佳答案
SCNText
的特点是它的pivot point
(又名 origin point
)位于其左角容器的底部。像那样:
因此您需要应用一个正则公式来计算枢轴点的中心位置:
/* ( Max dist - Min dist ) / 2 for X and Y */
下面是沿 X 轴重新定位轴心的真实代码:
sceneView.debugOptions = .showBoundingBoxes
let boundingBox = (abs(textNode.boundingBox.max.x) -
abs(textNode.boundingBox.min.x)) / 2
textNode.simdPivot.columns.3.x = boundingBox
此外,如果有深度挤压,沿 +Z 方向稍微偏移轴心也是个好主意。
关于swift - 如何将 SCNText 放置在 SCNPlane 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54495204/
我是一名优秀的程序员,十分优秀!