我正在跟随这个教程:http://blog.bignerdranch.com/754-scenekit-in-mountain-lion/
我对使用Scene Kit很感兴趣,但我的场景可能会有数千个球体。为了压力测试Scene Kit,我尝试了这个:
这对于一千个球(10 ^ 3)来说很好,但对于一百万个球(100 ^ 3),它失败了(也许不足为奇)。我不介意不能使用一百万个球,但我想知道明智的上限是多少(5,000?15,000?)以及如何增加它。
我该怎么做才能缓解这种情况?例如,我尝试过sphere.segmentCount = 3,虽然它可以加速渲染,但在内存使用方面没有太大影响,我认为这是限制因素。
另外,似乎没有SCNPoint类。当球的数量太多时,我想切换到仅显示一个点,但我从SceneKit文档中看不出如何显示简单的点 - 我能看到的最简单的是三角形。
非常感谢任何帮助。
编辑:@toyos建议将SCNSphere对象合并为单个SCNGeometry对象(前提是它们不需要独立动画),但我找不到简单的方法来实现这一点。
我只是试图找出最明智的方法来完成这个任务。
SCNSphere *sphere = [SCNSphere sphereWithRadius:0.5];
for (int i=0; i<10; i++) {
for(int j=0; j<10; j++){
for(int k=0; k<10; k++){
SCNNode *myNode = [SCNNode nodeWithGeometry:sphere];
myNode.position = SCNVector3Make(i,j,k);
[root addChildNode:myNode];
}
}
}
这对于一千个球(10 ^ 3)来说很好,但对于一百万个球(100 ^ 3),它失败了(也许不足为奇)。我不介意不能使用一百万个球,但我想知道明智的上限是多少(5,000?15,000?)以及如何增加它。
我该怎么做才能缓解这种情况?例如,我尝试过sphere.segmentCount = 3,虽然它可以加速渲染,但在内存使用方面没有太大影响,我认为这是限制因素。
另外,似乎没有SCNPoint类。当球的数量太多时,我想切换到仅显示一个点,但我从SceneKit文档中看不出如何显示简单的点 - 我能看到的最简单的是三角形。
非常感谢任何帮助。
编辑:@toyos建议将SCNSphere对象合并为单个SCNGeometry对象(前提是它们不需要独立动画),但我找不到简单的方法来实现这一点。
使用[SCNGeometry geometryWithSources:(* NSArray)sources geometryWithElements:(* NSArray) elements]
创建SCNGeometry
,详见这里的文档说明,但我不清楚如何从我的球体创建一个SCNGeometry
对象。
例如,对于单个球体,我可以使用sphere.geometryElementCount
获取元素数量,然后使用[sphere geometryElementAtIndex:(NSInteger)elementIndex]
来填充数组以获得元素,但我不确定如何获取“sources”(或它们是什么)。获取几何图形源的方法是[sphere geometrySourcesForSemantic:(NSString*) semantic]
,但这个语义字符串是什么?(它是“normals”还是“vertices”,还是其他什么?文档非常友好地说语义是“几何图形源的语义值。”,却没有说明语义的可能值是什么)
我只是试图找出最明智的方法来完成这个任务。