2

次の方法を使用して、カメラから見える SCNNodes を特定しています。

[self.scnView nodesInsideFrustumWithPointOfView:cameraNode];

ただし、返される配列は常に空です。次のようにシーンをセットアップしました。

-(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 = [Testnode createNode];
testnode.position = SCNVector3Make(0, 0, -10);
[self.scnView.scene.rootNode addChildNode:testnode];

私のデバイスでは、ノード「testnode」が画面に表示されていますが、nodesInsideFrustumWithPointOfView: は何も返しません。

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

4

1 に答える 1

1

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

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

私の場合、平面ジオメトリを追加し、マテリアルを透明に設定しました。

SCNNode *emptynode = [SCNNode node];
node.geometry = [SCNPlane planeWithWidth:1.0f height:2.0f];
node.geometry.firstMaterial.transparency = 0.0f;
于 2016-09-26T19:41:33.677 に答える