Richtung oder YRotation eines Nodes zum Laden eines Vehicles

  • Mir ist im LS13 schon aufgefallen dass der Heaptiptrigger nicht immer nach der Richtung des Anhängers, etc. gesetzt wurde.



    Zuerst dachte ich es wäre ein Bug vom LS, aber kann nicht sein da die Fahrzeuge beim Kaufen auch richtig gesetzt werden. Hab mich damit auch nicht weiter auseinandergesetzt.


    Jetzt hab ich den Heaptiptrigger nach LS15 konvertiert und das Script verbessert. Der Heaptiptrigger kann jetz auch aus Schaufeln heraus erstellt werden.
    Als Richtungsgebender Node wurde self.shovelTipReferenceNode verwendet.


    Jetzt wollte ich auch den oben genannten Bug beseitigen. Das Problem wurde auch gefunden:


    Wenn man im Editor ein Objekt um die Y-Achse dreht, dann erhöht sich der Wert bis 90° (1. Quadrant), dreht man weiter werden x & z auf -180° gesetzt und y geht Richtung 0° (2. Quadrant), danach geht der y-wert bis auf -90° (3. Quarant), x & z werden zurück auf 0° gesetzt und y von -90° bis auf 0° zurück.


    Habe Stunden, Tage überlegt und probiert. Gestern dachte ich: yes, bug gefixt. Heute musste ich feststellen dass es doch nicht passt.


    Mit dem bisher erarbeiteten Script funktioniert das ganze in der Ebene wunderbar, aber im Hang nicht mehr :thumbdown: .



    [lua]
    local dx,dy,dz = localDirectionToWorld(self.shovelTipReferenceNode, 0,0,1);
    setRotation(self.childShovelTipReferenceNode, math.asin(dy)+ math.rad(5), 0, 0);

    local yRot = 0
    local xd, yd, zd = localDirectionToWorld(self.childShovelTipReferenceNode, 0, 1, 0)


    yRot = Utils.getYRotationFromDirection(xd, zd)
    setRotation(self.pivotNode, 0, yRot, 0)[/lua]


    Das Funktioniert bisher so: im self.shovelTipReferenceNode wird ein Child erstellt dass die x Rotation der Welt annehmen soll (kompensieren gegenüber dem self.shovelTipReferenceNode), der x winkel ist er arc sin von dy + einen offset von 5° (um eine eindeutige richtung vorzugeben, ohne offset ist die richtung zufällig). danach wird aus dem child über xd und zd der Winkel für y generiert.


    Jetzt weis ich nicht mehr weiter...und meine mathematische Kenntisse und Vorstellungskraft reichen derzeit nicht in die 3. Dimension dass ich das alleine zuende bringen kann.


    Hab im Anhang den Mod zum testen.

  • Vorweg: ich muss zugeben ich versteh das Problem nicht 100%ig, bzw. was das eigentliche Ziel ist. Du willst dass die child node immer die selben richtungen wie die shovelTipReferenceNode hat, plus 5 Grad? Du willst die pivotNode gleich setzen zur shovelTipReferenceNode?


    Was mir jedenfalls auffällt ist dass dx, dy, dz world directions sind, setRotation() jedoch lokale (radians) erwartet. Vielleicht ist das gewollt, dann beziehe ich mich auf meine Aussage dass ich das eigentliche Ziel nicht verstehe :)

  • Ziel ist es z.b. den Heaptiptrigger mit der richtigen Richtung des referenz-nodes zu erstellen. Der blaue pivot Pfeil (Z-richtung) vom heaptiptrigger soll in die selbe Richtung zeigen wie der des referenz-nodes, hier in dem Fall self.shovelTipReferenceNode. Der Heaptiptrigger wird als Vehicle geladen, dort kann man nur die y-rotation mit angeben:


    local vehicle = g_currentMission:loadVehicle(g_currentModDirectoryOfHeapTipTrigger, positionX, yOffset, positionZ, yRotation);

  • Dann glaube ich du gehst das zu kompliziert an (oder ich übersehe was). Meine Vorgehensweise wäre die folgende:


    • world direction der shovel node nehmen (local dx,_,dz = localDirectionToWorld(self.shovelTipReferenceNode, 0,0,1);)
    • Rotation dieser direction nehmen (local yRot = Utils.getYRotationFromDirection(dx, dz);)
    • setRotation(self.pivotNode, 0, yRot, 0);


    Die x und z rotation brauch dich ja eigentlich nicht interessieren, da loadVehicle da eh nichts mit anfangen kann. Da du vorhin den Hang angesprochen hast, wären die x und z rots natürlich schon interessant, zumindest wenn du sie forciert setzen willst. Aber das kannste dir ja an dem Punkt aufm Terrain ausrechnen.

  • ja das hatte ich allererst auch, ich weis es nicht mehr 100%ig aber meinte dass sich die richtung um 180° gedreht hat sobald die schaufel zurückgekekippt wurde. Jetzt funktioniert das, warum auch immer ?( (vll. patch 1.2?)


    edit: achso, jetzt sehe ich den unterschied:
    (local dx,_,dz = localDirectionToWorld(self.shovelTipReferenceNode, 0,0,1);)


    hatte es vorher mit
    (local dx,_,dz = localDirectionToWorld(self.shovelTipReferenceNode, 0,1,0);)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!