Seite 1 von 1

PB 5.20 Weltkoordinaten und EntityBoundingBox

Verfasst: 27.09.2013 16:51
von hobbyfrickler
Hallo, ich versuche erstmalig 3D in PB 5.20 zu benutzen, habe nun aber ein Vertändnisproblem
mit den Weltkoordinaten, bzw. den Rückgabewerten von EntityBoundingBox().

Ich möchte von einem Entity die Eckpunkte als Weltkoordinaten haben, das Model/Entity ist ein
Mauerstück und ich möchte das nächste Mauerstück genau an das erste dransetzen.
Laut Hilfe und den Examples die ich mir angeschaut habe geht das mit EntityBoundingBox(),
also habe ich folgenden Code (Auszug):

Code: Alles auswählen

      x1 = EntityBoundingBox(#Mauer1, #PB_Entity_MinBoundingBoxX | #PB_Entity_WorldBoundingBox)
      y1 = EntityBoundingBox(#Mauer1, #PB_Entity_MinBoundingBoxY | #PB_Entity_WorldBoundingBox)
      z1 = EntityBoundingBox(#Mauer1, #PB_Entity_MinBoundingBoxZ | #PB_Entity_WorldBoundingBox)
      x2 = EntityBoundingBox(#Mauer1, #PB_Entity_MaxBoundingBoxX | #PB_Entity_WorldBoundingBox)
      y2 = EntityBoundingBox(#Mauer1, #PB_Entity_MaxBoundingBoxY | #PB_Entity_WorldBoundingBox)
      z2 = EntityBoundingBox(#Mauer1, #PB_Entity_MaxBoundingBoxZ | #PB_Entity_WorldBoundingBox)
      Debug("EntityBoundingBox welt x1: " + x1)
      Debug("EntityBoundingBox welt y1: " + y1)
      Debug("EntityBoundingBox welt z1: " + z1)
      Debug("EntityBoundingBox welt x2: " + x2)
      Debug("EntityBoundingBox welt y2: " + y2)
      Debug("EntityBoundingBox welt z2: " + z2)
Ich erhalte dann folgende Ausgabe:
[16:05:47] EntityBoundingBox welt x1: -0.5
[16:05:47] EntityBoundingBox welt y1: -0.5
[16:05:47] EntityBoundingBox welt z1: -0.5
[16:05:47] EntityBoundingBox welt x2: 0.5
[16:05:47] EntityBoundingBox welt y2: 0.5
[16:05:47] EntityBoundingBox welt z2: 0.5

Und hier verstehe ich nun nicht warum bekomme ich diese Weltkoordinaten ?
1.) Mein Model hat KEIN Seitenverhältnis von 1/1/1, es ist länger als breit und relativ schmal.
Es kann doch somit nicht genau 1 Welteinheit lang/breit/tief sein ? Mal abgesehen davon das es
auch nicht an 0,0,0 gesetzt ist.
2.) Es ist völlig egal wie ich das Model bzw. Entity mit ScaleEntity und/oder MoveEntity "bearbeite",
ich erhalte immer diese Weltkoordinaten.

Im englischen Forum fand ich ein ähnliches Problem, welches wohl unter anderem dadurch gelöst wurde,
das RenderWorld() vor dem Aufruf von EntityBoundingBox() ausgeführt wurde, aber das ändert bei mir
leider nichts.

Desweiteren lasse ich mir danach noch die lokalen Eckpunkte zurückgeben, diese spiegeln dann auch
das tatsäckliche Seitenverhältnis des Models wieder. Und eine anschließende Konvertierung mittels
ConvertLocalToWorldPosition() klappt auch, hier bemerke ich dann auch Auswirkungen von Move oder Scale.
Allerdings würde ich mir ja gerne diese Umrechnung ersparen und über EntityBoundingBox() gleich die
Weltkoordinaten ermitteln.

Mache ich da irgendeinen Denkfehler?

Re: PB 5.20 Weltkoordinaten und EntityBoundingBox

Verfasst: 29.09.2013 11:03
von tft
Hallo,
schau dir doch mal den Sorce bei den Examples/3d an. Dort kannst du etwas mit dem Befehl rumspielen und seine Funktionsweise austesten.

Gruss TFT

Re: PB 5.20 Weltkoordinaten und EntityBoundingBox

Verfasst: 29.09.2013 16:27
von hobbyfrickler
Danke für den Hinweis, habe ich mal gemacht und dort im Beispiel "EntityBoundingBox.pb" mein Modell geladen,
erwartungsgemäß waren die Rückgabewerte der Funktion hinsichtlich der globalen Koordinaten korrekt.

Habe dann nach Unterschieden im Beispiel und meinem Code gesucht und folgendes herausgefunden:
Die Abfrage nach den Weltkoordinaten mittels EntityBoundingBox() habe ich gleich nach dem erzeugen/setzen
der Entities gemacht, dies liefert dann ja ,wie beschrieben, die korrekten Werte für die lokalen
Koordinaten (aus denen auch die korrekten globalen errechnet werden können), aber eben falsche wenn man
#PB_Entity_WorldBoundingBox anwendet um gleich die globalen zu bekommen.

Um auch hier die korrekten Koordinaten zu bekommen muss mindestens einmalig ausgeführt sein:
1.) CreateCamera()
2.) RenderWorld()

Danke nochmal für den Tipp :allright: