3D Rotation anhand von Transition bestimmen (Face To)

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 3D Rotation anhand von Transition bestimmen (Face To)

    Problem:

    Gegeben sind die Koordinaten eines Objekts (x/y/z) in VRML. Dieses Objekt soll nun immer in die Richtung eines bestimmten Punktes ausgerichtet werden. Z.B. dem Punkt (0/0/0).

    Mein Lösungsansatz mit PHP:

    Zunächst wird die Euler- Rotation anhand der Koordinaten berechnet.
    Und zwar eine nach der anderen:
    Info: Punkt: ($y/$y/$Z), rotation: $xr, $yr, $zr
    PHP Code:

    // Y- ROTATION 
    if (($z == 0) && ($x >= 0)) { 
    $yr = -90
    } else if((
    $z == 0) && ($x 0)) { 
    $yr 90
    } else if(
    $z 0) { 
    $yr 180 atan2($x,$y); 
    } else if(
    $z 0) { 

    $yr atan2($x,$y); 

    // X- ROTATION 
    if (($y == 0) && ($z >= 0)) { 
    $xr = -90
    } else if((
    $y == 0) && ($z 0)) { 
    $xr 90
    } else if(
    $y 0) { 
    $xr 180 atan2($z,$y); 
    } else if(
    $y 0) { 

    $xr atan2($z,$y); 

    // Z- ROTATION 
    if (($y == 0) && ($x >= 0)) { 
    $zr = -90
    } else if((
    $y == 0) && ($x 0)) { 
    $zr 90
    } else if(
    $y 0) { 
    $zr 180 atan2($x,$y) - 180
    } else if(
    $y 0) { 
    $zr atan2($x,$y) ; 

    Dann erfolgt die Umwandlung in ein Quaternion:

    PHP Code:
    function get_quaternionByEulerRotation($xr,$yr,$zr){ 
    $q1 cos($xr/2) * cos($yr/2) * cos($zr/2) + sin($xr/2) * sin($yr/2) * sin($zr/2); 
    $q2 sin($xr/2) * cos($yr/2) * cos($zr/2) - cos($xr/2) * sin($yr/2) * sin($zr/2); 
    $q3 cos($xr/2) * sin($yr/2) * cos($zr/2) + sin($xr/2) * cos($yr/2) * sin($zr/2); 
    $q4 cos($xr/2) * cos($yr/2) * sin($zr/2) - sin($xr/2) * sin($yr/2) * cos($zr/2); 
    return array(
    $q2,$q3,$q4,$q1); 

    So, irgendwas stimmt da nicht. Obwohl es schon nicht schlecht aussieht.
    Hab ich einen Denkfehler???

    bin mal gespannt ob mir da jemand helfen kann...

    Stefan

  • #2
    Re: 3D Rotation anhand von Transition bestimmen (Face To)

    Original geschrieben von Stefanie
    So, irgendwas stimmt da nicht. Obwohl es schon nicht schlecht aussieht.
    Hab ich einen Denkfehler???

    bin mal gespannt ob mir da jemand helfen kann...
    Die Spannung wird wohl noch sehr lange anhalten ...
    Die (Haus-)Aufgabe ist ziemlich weit weg von dem was die meisten hier normalerweise so beschäftigt und "irgendwas stimmt nicht" bietet uns keinen Ansatzpunkt.

    Wenn ich mal soo viel Freizeit habe, das ich mich da reinlesen könnte, gehe ich lieber'n Bier trinken.

    Comment


    • #3
      Da ich nichts sehen kann, was denn nun nicht funktioniert bleibt mir nur eine Vermutung :

      Die Berechnungen in deiner Umwandlung sollten zum Teil in Klammern stehen (Punkt-vor-Strich-Rechnung), da sonst eben einfach nur von links nach rechts gerechnet wird.

      Also z.B. nicht so :
      PHP Code:
      $q1 cos($xr/2) * cos($yr/2) * cos($zr/2) + sin($xr/2) * sin($yr/2) * sin($zr/2); 

      sondern so :
      PHP Code:
      $q1 = (((cos($xr/2) * cos($yr/2) * cos($zr/2)) + sin($xr/2)) * sin($yr/2) * sin($zr/2); 
      Wenn's das nicht ist, bitte mal posten WAS denn nicht funktioniert oder stimmt

      Comment


      • #4
        Schauts euch einfach an...

        Hier die URL:


        http://3ddd.game-host.org/3Drisk/phprisk-3d/

        Benutzer: red
        Passwort: stefan

        Ihr braucht den Cortona VRML Player aber der müsste sich automatisch installieren.
        Ach ja, nur IE, am besten 6.0
        Und es könnte beim ersten mal ein wenig länger dauern mangels upstream und nicht optimierter dateien.

        Habe den Tip von oben jetzt noch nicht eingebaut.
        Mache ich heute abend.

        Gruß Stefan

        Comment


        • #5
          Re: Schauts euch einfach an...

          Original geschrieben von Stefanie
          Ihr braucht den Cortona VRML Player aber der müsste sich automatisch installieren.
          OffTopic:
          Na dann bin ich ja beruhigt.
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Comment

          Working...
          X