将场景的 (x, y) 转换为屏幕的 (x, y)
Convert Scene's (x, y) to screen's (x, y)
我有一个使用 SceneKit 构建的应用程序,当前显示多个节点。我可以弄清楚哪个节点被按下,并想用它来使标签出现在被触摸的节点下方。现在,当我按以下方式设置标签的中心时...
nameLabel.center = CGPointMake(CGFloat(result.node.position.x), CGFloat(result.node.position.y+20)
…因为节点在(1, 0)
上所以出现在左上角。我认为 sceneView 的 (0, 0)
在屏幕的 center 而实际的 display的(0, 0)
在左上角。
有没有办法将两个不同的数字相互转换? (我可以硬编码,因为我知道节点在哪里,或者为每个节点创建一个单独的标签,但这并不是一个真正完美的解决方案。)
提前致谢:)
您可以使用projectPoint:
方法:
var projected = view.projectPoint(result.node.position))
//projected is an SCNVector3
//projected.x and y are the node's position in screen coordinates
//projected.z is its depth relative to the near and far clipping planes
nameLabel.center = CGPointMake(CGFloat(projected.x), CGFloat(projected.y+20)
我有一个使用 SceneKit 构建的应用程序,当前显示多个节点。我可以弄清楚哪个节点被按下,并想用它来使标签出现在被触摸的节点下方。现在,当我按以下方式设置标签的中心时...
nameLabel.center = CGPointMake(CGFloat(result.node.position.x), CGFloat(result.node.position.y+20)
…因为节点在(1, 0)
上所以出现在左上角。我认为 sceneView 的 (0, 0)
在屏幕的 center 而实际的 display的(0, 0)
在左上角。
有没有办法将两个不同的数字相互转换? (我可以硬编码,因为我知道节点在哪里,或者为每个节点创建一个单独的标签,但这并不是一个真正完美的解决方案。)
提前致谢:)
您可以使用projectPoint:
方法:
var projected = view.projectPoint(result.node.position))
//projected is an SCNVector3
//projected.x and y are the node's position in screen coordinates
//projected.z is its depth relative to the near and far clipping planes
nameLabel.center = CGPointMake(CGFloat(projected.x), CGFloat(projected.y+20)