2
SCNNodeからスクリーン座標を取得したいので、これらの座標をSpriteKitオーバーレイで使用できます。 ノードは子ノードです。 親ノードのピボットを回転すると、projectPointは文字化けした結果を返します。SCNNode.pivotを回転させた後でSceneKit projectPointが正しくない
SCNScene:
class ScenekitScene:SCNScene {
override init() {
super.init()
let nodeCamera = SCNNode()
nodeCamera.camera = SCNCamera()
rootNode.addChildNode(nodeCamera)
let geoPyramid = SCNPyramid(width: 0.2, height: 0.5, length: 0.2)
let nodeCenterOfUniverse = SCNNode(geometry: geoPyramid)
nodeCenterOfUniverse.position = SCNVector3(0, 0, -5)
nodeCenterOfUniverse.pivot = SCNMatrix4MakeRotation(CGFloat.pi/4, 0.0, 0.0, 1.0)
rootNode.addChildNode(nodeCenterOfUniverse)
let geoSphere = SCNSphere(radius: 0.3)
let nodePlanet = SCNNode(geometry: geoSphere)
nodePlanet.name = "planet"
nodePlanet.position = SCNVector3(2, 0, 0)
nodeCenterOfUniverse.addChildNode(nodePlanet)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
SCNSceneRenderDelegate:
extension ViewController:SCNSceneRendererDelegate {
func renderer(_ renderer: SCNSceneRenderer, didRenderScene scene: SCNScene, atTime time: TimeInterval) {
if let planet = scene.rootNode.childNode(withName: "planet", recursively: true) {
let position = planet.convertPosition(planet.position, to: scene.rootNode)
let screencoords = renderer.projectPoint(position)
print (screencoords)
# result:
# SCNVector3(x: 461.913848876953, y: 2.58612823486328, z: 0.808080852031708)
# y should clearly be more to the center of the screen somewhere between 100-200
}
}
}
は誰が正しいscreencoordinatesを取得する方法を知っていますか?