2

わかりました、これは過去数時間頭を悩ませました。

SCNScenePhysicsWorld でレイテストを実行しようとしています (ただし、SCNRenderer の hitTest は問題なく動作します)。

私が取る手順: 1.- プロパティ:

let scene = SCNScene() 
var sceneView = SCNView(frame: CGRectZero, options: [SCNPreferredRenderingAPIKey:NSNumber(unsignedLong: SCNRenderingAPI.OpenGLES2.rawValue)]) 

// hit sphere
let hitSphere = SCNSphere(radius: 55)
var hitNode   : SCNNode! = nil
var hitShape  : SCNPhysicsShape! = nil
var hitBody   : SCNPhysicsBody!  = nil

2.-

setupWorld {
    sceneView.scene = scene
    sceneView.delegate = self    
.
.
.

    hitNode = SCNNode(geometry: hitSphere)
    hitNode.position = SCNVector3Make(0, 0, 0)

    // neither work
    hitShape = SCNPhysicsShape(geometry: hitSphere, options: nil)
    // hitShape = SCNPhysicsShape(node: hitNode, options: nil)
    hitBody  = SCNPhysicsBody(type: .Static, shape: hitShape)
    hitNode.physicsBody = hitBody
.
.
.
    spheresNode.position = SCNVector3Make(0, 0, 0)
    spheresNode.addChildNode(renderNode)
    spheresNode.addChildNode(hitNode)

scene.delegate = self

}

3.-

func renderer(renderer: SCNSceneRenderer, didRenderScene scene: SCNScene, atTime time: NSTimeInterval) {
.
.
.
let rayHit = scene.physicsWorld.rayTestWithSegmentFromPoint(nearpoint, toPoint: farpoint, options: [SCNPhysicsTestBackfaceCullingKey:false]).first

私は rayHit = nil を取得し続けますが、hitBody が近点と遠点の範囲内にあることは 100% 確信しています

私はここで何かが欠けているに違いないことを認識していますが、何がわからないのですか

手がかりや指針はありますか?

PS: 近点は hitSphere の内側にあり、遠点は外側にあります。ヒットする座標を見つけたいです。私はすでに SCNSceneRenderer.hitTest を介してそれを行っていますが、rayTest でそれを行う方法を学びたいです。

}
4

0 に答える 0