2016-09-05 9 views
2

次の方法を使用して、カメラが認識できるSCNNodeを特定しています。SceneKit nodesInsideFrustumWithPointOfView:予期せず空に戻る

[self.scnView nodesInsideFrustumWithPointOfView:cameraNode]; 

ただし、返される配列は常に空です。 「私のデバイス上で

testnode = [Testnode createNode]; 
testnode.position = SCNVector3Make(0, 0, -10); 
[self.scnView.scene.rootNode addChildNode:testnode]; 

、ノードをランダム時

-(void)setupScene{ 
scene = [SCNScene scene]; 

cameraNode = [SCNNode node]; 
cameraNode.camera = [SCNCamera camera]; 
[scene.rootNode addChildNode:cameraNode]; 
cameraNode.position = SCNVector3Make(0, 0, 0); 

[scene.rootNode addChildNode:cameraNode]; 

self.scnView.scene = scene; 
self.scnView.showsStatistics = YES; 
self.scnView.backgroundColor = [UIColor clearColor]; 
} 

をシーンを作成した後、私はシーンにSCNNodeを追加し、次のように 私はシーンを設定しますtestnode "が画面上に表示されていますが、nodesInsideFrustumWithPointOfView:何も返しません。

EDIT:視点をスポットライトオブジェクトに変更し、「テストノード」がその錐台の内側にあるかどうかをテストしました。ここに私が画面に表示されているものがあります:http://imgur.com/a/C3XGuしかし、配列はまだ空を返します。テストノードは白いキューブです。

+0

同じ経験。あなたは修正を見つけましたか? – Crashalot

+0

@クラシャロット私はやった!しかし、ここにそれを書くのを忘れてしまった。うまくいけばそれはあなたにも当てはまります。 isNodeInsideFrustumとnodesInsideFrustumWithPointOfViewは、nullジオメトリを持つノードの子であるノードを検出していないようです。私の場合、ノードはヌルジオメトリを持つノードの子であったパーティクルシステムでした。 – SMD01

+0

Hmm ok、ヒットテストでジオメトリが動作する必要がある場合はちょっと意味があります。将来の読者が利益を得ることができるように、これを回答として投稿してください。 – Crashalot

答えて

0

これを追加すると、視認性が向上します。これに対してCrashalotに感謝します。

基本的に、[scnView nodesInsideFrustumWithPointOfView:][scnView isNodeInsideFrustum: withPointOfView:]を使用して検出しようとしているSCNNodeが、空のジオメトリを持つノードの子である場合、検出されません。私の場合は

、私は平面形状を追加し、透明に材料を設定します。

SCNNode *emptynode = [SCNNode node]; 
node.geometry = [SCNPlane planeWithWidth:1.0f height:2.0f]; 
node.geometry.firstMaterial.transparency = 0.0f; 
関連する問題