PB 5.20 Weltkoordinaten und EntityBoundingBox

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
hobbyfrickler
Beiträge: 2
Registriert: 27.09.2013 00:02

PB 5.20 Weltkoordinaten und EntityBoundingBox

Beitrag 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?
Benutzeravatar
tft
Beiträge: 650
Registriert: 08.09.2004 20:18
Computerausstattung: GFX 3060 Ti , i7 12700F , 32 GB Ram , 900 GB SSD , TV
Wohnort: Dachsen
Kontaktdaten:

Re: PB 5.20 Weltkoordinaten und EntityBoundingBox

Beitrag 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
TFT seid 1989 , Turgut Frank Temucin , CH-Dachsen/DE-Berlin/TR-Antalya
Mein Projekt (Driving School Evergarden)
Codes bei (GitHub) Videos von (YouTube)
Treffen via Discord: Einladung

PB 6.10 | W11 | i7 12700F | 32 GB Ram | RTX 3060 Ti | 60 Herz -TV FullHD
ARDUINO Freak | Sprecher | Game Dev. | Geschichten Erzähler :-)
hobbyfrickler
Beiträge: 2
Registriert: 27.09.2013 00:02

Re: PB 5.20 Weltkoordinaten und EntityBoundingBox

Beitrag 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:
Antworten