Main Menu
Menu

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Messages - arucro

#1
Hi,

Quote from: EgonOlsen on February 13, 2013, 08:19:04 AM
...Dann musst du die Seite bestimmen, von der du die Normale haben willst, nimmst dir drei Punkte in dieser Fläche (das sind einfach drei Eckpunkte der BB), multiplizierst sie mit der Matrix aus getWorldTransformation() vom Objekt selber, berechnest die Richtungsvektoren zwischen den Punkten und davon das Kreuzprodukt ist die Normale.

Dazu müsst ich allerdings aber zunächst herausfinden von welcher Fläche der Boundingbox (also welches Face) ich die Normale berechnen möchte, wenn ich ein Polygon innerhalb der BB per Picking-Ray treffe.
Das gepickte Polygon erhalte ich ja bereits über den PolygonManager und ebenso deren transformierte Normale.
Kann ich anhand dieser Informationen irgendwie herausfinden welche Seite bzw. welche Fläche der BB beim Picking getroffen wurde? Oder mit anderen Worten: Durch welche Seite der BB das "Picking-Ray durchgeschossen" ist?

Quote from: EgonOlsen on February 13, 2013, 08:19:04 AM
Ob das die beste Lösung ist, um das Andocken zu realisieren, weiß ich nicht. Statt der Normalen könnte man auch (viel einfacher) mit den Resultaten von get?Axis() des Objekts versuchen.

Beim Picking nützt mir diese Funktion auch nicht, da ich, wie oben beschrieben, vorher wissen muss, von welcher Seite das gepickte Objekt getroffen wurde. Habe ich die Seite herausgefunden, könnte man auch bequem mit den get?Axis()-Funktionen arbeiten, statt die Normale zu berechnen - Das gebe ich zu.

Eine Lösung des Problems wäre vielleicht die Kombination von 2x Object3Ds.
Eines stellt dabei das visuelle Mesh dar, das andere die "virtuelle BB" (ist zwar redundant, diese doppelt intern zu definieren, aber dadurch, dass ich ein Object3D als BB um das andere ummantele, könnte ich auf dieses Element die Picking-Tests durchführen). Leider finde ich hierbei aber nicht heraus, wie man das "virtuelle BB" unsichtbar schalten kann, aber dennoch von Picking-Tests erfasst wird.

Soviel zu meinen Gedanken. Hast du noch eine Idee bezüglich auch meines Problems oben und meines Lösungsvorschlags?

Gruß
#2
Es geht in meiner Anwendung darum sich seine Welt zur Laufzeit selbst "zusammenzuklicken".
Dabei soll man Objekte an andere Objekte "andocken" können.
Da die Objekte mitunter sehr komplex ausfallen, jedoch vermutlich durch eine einfachere Boundingbox umhüllt werden, bietet es sich gerade fürs Picking in diesem Fall an mit der Boundingbox zu arbeiten, statt mit dem komplexen Objekt selbst.

Deswegen fragte ich mich ob es nicht auch möglich sei statt von dem Objektpunkt die Normale , die Normale der Boundingbox zu ermitteln.
Denn anhand dieser kann ich klare einheitliche Regeln aufstellen wie Objekte positioniert werden können.

Oder gibts bessere Ideen das zu machen?
#3
Hi,

soweit ich bisher gesehen habe, ist es nur möglich die Normale des angeklickten Polygons zu ermitteln.
(mit PolygonManager.getTransformedNormal())

Ist es auch möglich die Normale der BoundingBox des angeklickten Objekts zu ermitteln ?

Gruß
#4
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
#5
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ß
#6
German corner / Fliegengewicht für "Object3D"-Objekte
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