Author Topic: Fliegengewicht für "Object3D"-Objekte  (Read 4495 times)

Offline arucro

  • byte
  • *
  • Posts: 6
    • View Profile
Fliegengewicht für "Object3D"-Objekte
« on: February 11, 2013, 08:47:34 pm »
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

Offline EgonOlsen

  • Administrator
  • quad
  • *****
  • Posts: 12295
    • View Profile
    • http://www.jpct.net
Re: Fliegengewicht für "Object3D"-Objekte
« Reply #1 on: February 11, 2013, 09:26:37 pm »
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()
« Last Edit: February 11, 2013, 10:39:43 pm by EgonOlsen »

Offline arucro

  • byte
  • *
  • Posts: 6
    • View Profile
Re: Fliegengewicht für "Object3D"-Objekte
« Reply #2 on: February 11, 2013, 10:11:46 pm »
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ß

Offline EgonOlsen

  • Administrator
  • quad
  • *****
  • Posts: 12295
    • View Profile
    • http://www.jpct.net
Re: Fliegengewicht für "Object3D"-Objekte
« Reply #3 on: February 11, 2013, 10:28:08 pm »
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.

Offline arucro

  • byte
  • *
  • Posts: 6
    • View Profile
Re: Fliegengewicht für "Object3D"-Objekte
« Reply #4 on: February 11, 2013, 10:31:43 pm »
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

Offline EgonOlsen

  • Administrator
  • quad
  • *****
  • Posts: 12295
    • View Profile
    • http://www.jpct.net
Re: Fliegengewicht für "Object3D"-Objekte
« Reply #5 on: February 11, 2013, 10:40:17 pm »
Äh, ja. Das war Quatsch. cloneMesh() gibt es auch, aber nicht in Object3D. Ich habe das Posting korrigiert.