[Erledigt]Set Entity Rotation mit FetchOrientation()

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
tft
Beiträge: 605
Registriert: 08.09.2004 20:18
Computerausstattung: GTX Titan , i9 9900K , 32 GB Ram , 500 GB SSD , 3 ASUS FullHD Monitore and more
Wohnort: Dachsen
Kontaktdaten:

[Erledigt]Set Entity Rotation mit FetchOrientation()

Beitrag von tft »

Hallo,

ich versuche mich gerade daran, die Absoluten Rotations Winkel von einem Entity zu Speicher und dann wider zu restaurieren.
Dabei versage ich völlig . Mir scheint da etwas wesentliches nicht bekannt zu sein.

ich speicher die daten in einer Text datei.

Code: Alles auswählen

 
    WriteStringN(0,  "pos "+StrF(EntityX(ml()    \EntityHandler,#PB_Absolute))+" "+StrF(EntityY(ml()  \EntityHandler,#PB_Absolute)) +" "+StrF(EntityZ(ml()   \EntityHandler,#PB_Absolute)) +" ")
    WriteStringN(0,  "rot "+StrF(EntityPitch(ml()\EntityHandler,#PB_Absolute|#PB_Engine3D_Adjusted))+" "+StrF(EntityYaw(ml()\EntityHandler,#PB_Absolute|#PB_Engine3D_Adjusted)) +" +StrF(EntityRoll(ml()\EntityHandler,#PB_Absolute|#PB_Engine3D_Adjusted)) +" ")
 
und will sie so wider zurückstellen .... aber schon die Gespeicherten Werte sind total unlogisch.

Code: Alles auswählen

     If FindString(Daten,"pos ") 
                              
         p1 = FindString(Daten," ",1)
         p2 = FindString(Daten," ",p1 + 1)
         p3 = FindString(Daten," ",p2 + 1)
         ML()\PosX = ValF(Mid(Daten,p1+1,p2-p1))
         ML()\PosY = ValF(Mid(Daten,p2+1,p3-p2))
         ML()\PosZ = ValF(Mid(Daten,p3+1,Len(Daten)-p3))
                              
         Debug StrF(ML()\PosX)+"/"+StrF(ML()\PosY)+"/"+StrF(ML()\PosZ)
                              
         daten = ReadString(0)
         If FindString(Daten,"rot ")
                                
         p1 = FindString(Daten," ",1)
         p2 = FindString(Daten," ",p1 + 1)
         p3 = FindString(Daten," ",p2 + 1)
         ML()\RotX = ValF(Mid(Daten,p1+1,p2-p1))
         ML()\RotY = ValF(Mid(Daten,p2+1,p3-p2))
         ML()\RotZ = ValF(Mid(Daten,p3+1,Len(Daten)-p3))
                                
         Debug StrF(ML()\RotX)+"/"+StrF(ML()\RotY)+"/"+StrF(ML()\RotZ)
und anschliessend erzeuge und rotiere ich das Entity so.

Code: Alles auswählen

    
      mesh =  LoadMesh(#PB_Any,GetCurrentDirectory()+"Data\mesh\"+ML()\BlockName+".mesh")
      If mesh = 0 : Debug "Konnte mesh nicht laden" : Debug GetCurrentDirectory()+"Data\mesh\"+ML()\BlockName+".mesh" : EndIf
      result = CreateEntity(#PB_Any,MeshID(mesh),MaterialID(_material3),ML()\PosX,ML()\PosY,ML()\PosZ, #SelectMasik5)
      RotateEntity(result,ML()\RotX,ML()\RotY,ML()\RotZ,#PB_Absolute)
      If result = 0 : Debug "Konnte Entity nicht erzeugen" : EndIf
Kann es sein das ich nicht alle 3 Achsen gleichzeitig behandeln Kann?

Gruss TFT
Zuletzt geändert von tft am 05.04.2021 12:51, insgesamt 2-mal geändert.
TFT seid 1989 , Turgut Frank Temucin , Dachsen/Berlin/Antalya
Aktuelles Projekte : Driving School Evergarden
YouTube : Pure Basic to go
FaceBook : Temuçin SourceMAgic Games
DISCORD : SourceMagic
W10 , i9 9900K ,32 GB Ram , GTX Titan , 3 Monitore FHD
ARDUINO Freak :-)
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Rotation von Entity

Beitrag von STARGÅTE »

Hallo tft,

>> "Kann es sein das ich nicht alle 3 Achsen gleichzeitig behandeln Kann?"
So in etwa. Die Euler Winkel haben die schwäche, dass die drei Koordinaten (Pitch, Yaw, Roll) alleine nicht ausreichen um eine Orientierung im Raum, eindeutig zu definieren. Es ist auch immer eine klar definierte Reihenfolge der Rotationen nötig (Konventionen), damit es zum selben Ergebnis führt.

Abhilfe schaffen hier die Funktionen FetchOrientation() und SetOrientation(). Mit ihnen kannst du (solltest du) wirklich den eindeutigen Zustand eines Objekts in Form eines Quaternion (4 Koordinaten) zurückgeben lassen und dann auch wieder zuweisen.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
tft
Beiträge: 605
Registriert: 08.09.2004 20:18
Computerausstattung: GTX Titan , i9 9900K , 32 GB Ram , 500 GB SSD , 3 ASUS FullHD Monitore and more
Wohnort: Dachsen
Kontaktdaten:

Re: Rotation von Entity

Beitrag von tft »

Ja hallo ...

genau so funktioniert es ...... danke für den Hinweis.

Gruss TFT
TFT seid 1989 , Turgut Frank Temucin , Dachsen/Berlin/Antalya
Aktuelles Projekte : Driving School Evergarden
YouTube : Pure Basic to go
FaceBook : Temuçin SourceMAgic Games
DISCORD : SourceMagic
W10 , i9 9900K ,32 GB Ram , GTX Titan , 3 Monitore FHD
ARDUINO Freak :-)
Antworten