SceneKit nodesindefrustumwithpointofview:意外返回空



我使用以下方法来确定哪些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"是否在其截锥内。这是我在屏幕上看到的:https://i.stack.imgur.com/ZMr6b.jpg然而数组仍然返回空。测试节点是白色立方体。

添加这个以获得更好的可视性。感谢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;

最新更新