SceneKit unter OS X mit Tausenden von Objekten

Ich folge diesem Tutorial:http://blog.bignerdranch.com/754-scenekit-in-mountain-lion/

Ich möchte das Scene Kit verwenden, aber meine Szenen können möglicherweise Tausende von Kugeln enthalten. Zum Stresstest des Scene Kits habe ich Folgendes versucht:

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];
        }
    }
}

Dies funktioniert beispielsweise für 1000 Kugeln (10 ^ 3), schlägt jedoch (möglicherweise nicht überraschend) für 1.000.000 Kugeln (100 ^ 3) fehl. Es macht mir nichts aus, nicht in der Lage zu sein, eine Million Kugeln zu verwenden, aber ich möchte herausfinden, wie die vernünftige Obergrenze (5.000? 15.000?) Ist und wie sie erhöht werden kann.

Was kann ich tun, um dies zu mildern? z.B. Ich habe sphere.segmentCount = 3 ausprobiert und während dies das Rendern beschleunigt, hat es keine großen Auswirkungen auf die Speichernutzung, was meiner Meinung nach der begrenzende Faktor ist.

Außerdem scheint es keine SCNPoint-Klasse zu geben. Ich habe darüber nachgedacht, nur einen Punkt anzuzeigen, wenn die Anzahl der Kugeln zu hoch ist. In der SceneKit-Dokumentation kann ich jedoch nicht nachvollziehen, wie ein einfacher Punkt angezeigt wird. Das einfachste, was ich sehen kann, ist ein Dreieck.

Jede Hilfe wird sehr geschätzt.

Bearbeiten: @toyos schlug vor, dass die SCNSphere-Objekte zu einem einzigen SCNGeometry-Objekt zusammengeführt werden (vorausgesetzt, sie müssen nicht unabhängig animiert werden, was sie nicht tun), aber ich kann keinen einfachen Weg finden, dies zu tun.

SCNGeometry wird mithilfe von erstellt[SCNGeometry geometryWithSources:(* NSArray)sources geometryWithElements:(* NSArray) elements] wie dokumentiertHier, aber mir ist nicht klar, wie man eine erstelltSCNGeometry Objekt aus meinen Sphären.

z.B. Für eine einzelne Kugel konnte ich die Verwendung sehensphere.geometryElementCount um die Anzahl der Elemente zu ermitteln und diese dann zum Auffüllen eines Arrays zu verwenden[sphere geometryElementAtIndex:(NSInteger)elementIndex] was mir die Elemente geben würde, aber ich bin nicht sicher, wie ich an die "Quellen" komme (oder was sie überhaupt sind). Die Methode zum Abrufen der Geometriequellen lautet[sphere geometrySourcesForSemantic:(NSString*) semantic], aber was ist das für eine semantische Zeichenfolge? (Ist es gemeint, "Normalen" oder "Eckpunkte" zu sein oder ist dies etwas anderes? Die Dokumentation sagt recht hilfreich, dass die Semantik "Der semantische Wert der Geometriequelle" ist, ohne zu sagen, welche möglichen Werte der Semantik sind.)

Das ist nur für eine einzelne Kugel, die ziemlich sinnlos wäre (daSCNSphere ist nur eine Unterklasse vonSCNGeometry ohnehin), also muss ich jetzt mehrere Kugeln hinzufügen. Ich müsste also die Eckpunkte der Kugel manuell verschieben, wenn ich sie zu meiner hinzufügen würdeSCNGeometry Objekt?

Ich versuche nur, den vernünftigsten Weg zu finden, dies zu tun.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage