SceneKit nodesInsideFrustumWithPointOfView:意外返回空
SceneKit nodesInsideFrustumWithPointOfView: unexpectedly returning empty
我正在使用以下方法来确定相机可见哪些 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: returns 什么都没有。
编辑:我尝试将视角更改为聚光灯对象并测试 "testnode" 是否在其平截头体内。这是我在屏幕上看到的:http://imgur.com/a/C3XGu 然而数组仍然 returns 为空。测试节点是白色立方体。
添加这个是为了更好的可见性。感谢 Crashalot。
基本上,如果您尝试使用 [scnView nodesInsideFrustumWithPointOfView:]
和 [scnView isNodeInsideFrustum: withPointOfView:]
检测的 SCNNode 是具有空几何结构的节点的子节点,则不会检测到它。
在我的例子中,我添加了平面几何并将 material 设置为透明:
SCNNode *emptynode = [SCNNode node];
node.geometry = [SCNPlane planeWithWidth:1.0f height:2.0f];
node.geometry.firstMaterial.transparency = 0.0f;