Fliegengewicht für "Object3D"-Objekte

Started by arucro, February 11, 2013, 08:47:34 PM

Previous topic - Next topic

arucro

Hallo zusammen,

in meiner Anwendung möchte ich signifikant viele Objekte zur Laufzeit dynamisch hinzufügen können. (Sprich dem world-Objekt hinzufügen können)
Diese Objekte haben dabei oft das gleiche Mesh, jedoch in unterschiedlicher Orientierung und Position im Weltkoordinatensystem.

Da die Meshdaten in einem "Object3D" verpackt sind heißt das bei meiner Anwendung konkret, dass ich für jedes neue Mesh eine Kopie des jeweiligen Object3D-Objekt anlegen muss um dieses an meine gewünschte Position zu translatieren / rotieren.

Um Speicher zu sparen möchte ich Gebrauch des Fliegengewichts-Entwurfsmuster machen. (hier nachzulesen: http://en.wikipedia.org/wiki/Flyweight_pattern)

Leider weiß ich zurZeit nicht weiter, wie ich die Anzahl der "internen Objekte / Instanzen" verringern (Durch die Anwendung einer Fliegengewichtsfabrik) kann wenn jedes Objekt ein Mesh repräsentiert und ich nur damit arbeiten kann.

Was ich im Grunde konkret suche ist eine Möglichkeit das Zeichnen der Meshdaten eines Object3D mit Position und Rotation zu parametrisieren.

Gibt es in jpct diese Möglichkeit bzw. kann man sonst irgendwelche Optimierungen bezüglich meines Anwendungsfalls durchführen?

Viele Grüße,

arucro

EgonOlsen

#1
Es gibt mehrere Optionen:


  • Beim Erzeugen einer Kopie eines Object3D über cloneMesh() cloneObject() werden bereits die Teile geteilt, wo das ohne Probleme sinnvoll möglich ist. Alternativ: new Object3D(old, true);
  • Wenn du jPCT-AE benutzt oder bei jPCT mit compile() arbeitest (was zu empfehlen ist), kannst du Object3D.shareCompiledData(old); verwenden.
  • Wenn zusätzlich zum letzten Punkt auch noch die Texturen identisch sind, kannst du Object3D.shareTextureData(old); verwenden.
  • Wirf einen Blick auf Object3D.strip()

arucro

Hi,

mithilfe von shareCompiledData und shareTextureData lässt sich schonmal etwas flexibleres bauen. Danke!

zu 1)
Du meintest Object3D.cloneObject() und nicht cloneMesh() oder? Denn die Methode habe ich nicht in der Klasse Object3D gefunden.

Und noch eine andere Frage:

Ist es möglich Meshes (zur Laufzeit) zusammenzuführen, die die selben Vertices teilen und die selbe Textur besitzen, so wie es in Loader.setVertexOptimization() beschrieben ist?

Gruß

EgonOlsen

Ist aber da: http://www.jpct.net/doc/com/threed/jpct/Object3D.html#cloneObject()

Meshes zur Laufzeit...naja, könnte man irgendwie machen. Würde ich aber nicht tun. Es wird nicht so wirklich effizient werden und auch ansonsten ein ziemliches Gefummel.

arucro

Hi ja. cloneObject() hatte ich auch gefunden. Du meintest nur im 2. Post etwas von "cloneMesh()" das verwirrte mich :)

Gut ich experimentiere erstmal mit dem rum was ich habe. Danke nochmal

EgonOlsen

Äh, ja. Das war Quatsch. cloneMesh() gibt es auch, aber nicht in Object3D. Ich habe das Posting korrigiert.