1. Bitte schaltet eure Ad Blocker aus. SLinfo kann nur betrieben werden, wenn es durch Werbung Einnahmen erzielt. Vielen Dank!!
    Information ausblenden
  2. Wir freuen uns, wenn du dich in unserem Forum anmeldest. Bitte beachte, dass die Freigabe per Hand durchgeführt wird (Schutz vor Spammer). Damit kann die Freigabe bis zu 24 Stunden dauern.
    Information ausblenden
  3. Wir verwenden Cookies, um Inhalte und Anzeigen zu personalisieren, Funktionen für soziale Medien anbieten zu können und die Zugriffe auf unsere Website zu analysieren. Sie geben Einwilligung zu unseren Cookies, wenn Sie unsere Webseite weiterhin nutzen.
    Information ausblenden

ScripterIn für ein Rotations-Problem gesucht

Dieses Thema im Forum "Suche / Biete Jobs" wurde erstellt von Patrick Lawson, 17. Januar 2013.

  1. Patrick Lawson

    Patrick Lawson Nutzer

    Beiträge:
    86
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Wie es der Titel schon sagt suche ich jemanden der mir bei einem Rotations-Problem hilft.
    > In einem HUD sollen ein Childprim so gedreht werden, dass mir die Richtung zu einer globalen Koordinate angezeigt wird. Stecke da fest und benötige Hilfe für die ich auch bereit bin die benötigte Zeit zu entschädigen.

    Pat
     
  2. argus Portal

    argus Portal Freund/in des Forums

    Beiträge:
    886
    Zustimmungen:
    5
    Punkte für Erfolge:
    18
    Ich bin nicht ganz sicher, was du meinst. Du redest doch nicht von einer 3-dimensionalen Bewegung ? ich habe dir kurz einen
    Kompass gescripted. Du kannst einen Ziel-Winkel angeben. Vielleicht ist es das, was du meinst.







    Code:
    
    // Dieses Script in Root. Dann ein schmales Prim als Zeiger hinzu-
    // linken. Dieses Zeiger-Prim muss entlang seiner y-Achse in die
    // Länge skaliert werden.  Rotiert wird es um seine z-Achse.
    
    // Das Root-Prim muss als HUD so rotiert werden, das man entlang seiner
    // z-Achse schaut !
    
    
    rotation r;
    float ziel_ausrichtungf; 
    rotation zielausrichtungr;
    
    integer an;
    
    
    
    
    
    
    default
    {
        state_entry()
        {
            an = FALSE;
            
            // Hier die gewünschte Richtung angeben: 0 ist Norden (DEG_TO_RAD dient der besseren Nachvollziehbarkeit)
            ziel_ausrichtungf = 0.0 * DEG_TO_RAD; 
            
            zielausrichtungr = llAxisAngle2Rot(<0.0,0,1.0>,ziel_ausrichtungf);
        }
    
    
        touch_start(integer nr)
        {
            if (an == FALSE)
            {
                an = TRUE;
                llSetTimerEvent(0.2);
            }
            else
            {
                an = FALSE;
                llSetText("",<1,1,1>,1);
                llSetTimerEvent(0.0);
            }
    
        }
    
        timer()
        {
            r = llGetRootRotation();
            llSetText((string)( llRot2Angle(r) * RAD_TO_DEG),<1,1,1>,1);
             
            r = zielausrichtungr / r ;
            
            llSetLinkPrimitiveParamsFast(2,
                                         [PRIM_ROT_LOCAL,r]);
        }
    
    }
    
    
     
    Zuletzt bearbeitet: 17. Januar 2013
  3. Patrick Lawson

    Patrick Lawson Nutzer

    Beiträge:
    86
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Nein, war nicht das was ich wollte. bzw. nicht ganz genau das. Kompass der immer schön nach Norden zeigt hatte ich schon :)

    Was ich möchte ist aus 2 (globalen) Koordinaten (jetzige Position x1,y1 und soll-Position x2,y2) eine Richtung anzeigen können. Z kann weggelassen werden.
    Der Zeiger soll abhängig von meiner aktuellen Position immer in Richtung Zielkoordinaten x2,y2 zeigen. Ein Navi welches mir den Weg zum Ziel zeigt.
    Was ich nicht hinkriege ist aus den 2 bekannten Positionen (Vectoren!) einen Winkel zu errechnen, welcher dann das Child drehen kann.

    Ich schick Dir gerne mal InWorld das HUD mit den Code und meinen (erfolglosen) Versuchen für die Navigation
    Pat
     
  4. argus Portal

    argus Portal Freund/in des Forums

    Beiträge:
    886
    Zustimmungen:
    5
    Punkte für Erfolge:
    18
    Dann geh am besten über den Sinus: Ermittele die Distanzen auf der x- und der y-Achse. Dann kannst du den
    Winkel so ausrechnen:

    winkel = x / sqr(x^2 + y^2)

    Ist jetzt ein Schnellschuss. Müsste aber gehen.
     
  5. Zita Python

    Zita Python Nutzer

    Beiträge:
    55
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Naja, ich glaube noch nicht ganz. Um den Winkel in einem Dreieck zu berechnen, wird das meistens über den Arcus-Tangens gemacht. In diesem Fall, bei zwei Punkten (x1,y1) und (x2,y2) sollte das ungefähr so aussehen:

    winkel = arctan((y2-y1) / (x2-x1))

    Wobei man da noch etwas mit den Vorzeichen der beiden Terme (y2-y1) und (x2-x1) noch etwas aufpassen muss, um den richtigen Quadranten zu erwischen muss man dann PI/2 drauf oder abziehen.

    Aber das ist jetzt hier auch nur ein Schnellschuss.

    LG Zita
     
  6. Daemonika Nightfire

    Daemonika Nightfire Forumsgott/göttin

    Beiträge:
    7.887
    Zustimmungen:
    1.206
    Punkte für Erfolge:
    124
  7. Dianna Loxely

    Dianna Loxely Superstar

    Beiträge:
    1.621
    Zustimmungen:
    2
    Punkte für Erfolge:
    0
    llRotLookAt und llRotBetween dürften geeignete funktionen sein.
    ich wollte einmal bei einem pfadgesteuert bewegtem flugdings (ohne pathfinding) dieses ding während des fluges immer schön mit der "nase" in zielrichtung blickend haben, aber ausser graue haare und kopfweh bekam ich damit nichts brauchbares hin
     
  8. Rebekka Revnik

    Rebekka Revnik Superstar

    Beiträge:
    1.081
    Zustimmungen:
    24
    Punkte für Erfolge:
    49
    Code:
    rotation r1 = llGetRot() * llRotBetween(<0,0,1> * llGetRot(), Ziel - llGetPos());
    llSetPrimitiveParams([PRIM_ROTATION, r1]);
    Einfach deshalb weil llLookAt() im OS nicht geht.
    Und das ist fürs Root-Prim, lässt sich aber auch für Childs umstellen.
     
  9. Dianna Loxely

    Dianna Loxely Superstar

    Beiträge:
    1.621
    Zustimmungen:
    2
    Punkte für Erfolge:
    0
    was ist OS?
    Open Source?
    Open SIM?
    Operating System?
    und warum erwähnst du es?
     
  10. Patrick Lawson

    Patrick Lawson Nutzer

    Beiträge:
    86
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    oh, so viele ansätze! dann geh ich mal wieder in die sandbox und versuche mich selbst nochmals daran...
     
  11. Rebekka Revnik

    Rebekka Revnik Superstar

    Beiträge:
    1.081
    Zustimmungen:
    24
    Punkte für Erfolge:
    49
    OS = OpenSim, und wie ich schon schrieb geht llLookAt() da nicht richtig. Ich versuch meine Skripte für beide Welten zu machen.
     
  12. Dianna Loxely

    Dianna Loxely Superstar

    Beiträge:
    1.621
    Zustimmungen:
    2
    Punkte für Erfolge:
    0
    Entschuldige wenn ich jetzt kleinlich wirke, aber Patrick wollte nicht ins OpenSim

    aber wo wir schon mal dabei sind, OSL hat ein paar nette befehle, die ich mir gern in Sl wünschte. zb skriptgesteuert eine notecard zu schreiben
     
  13. Rebekka Revnik

    Rebekka Revnik Superstar

    Beiträge:
    1.081
    Zustimmungen:
    24
    Punkte für Erfolge:
    49
    Das Skriptschnipsel funktioniert in SL genauso.
    Und wenns dir nicht passt überlies es doch einfach :)
     
  14. Dianna Loxely

    Dianna Loxely Superstar

    Beiträge:
    1.621
    Zustimmungen:
    2
    Punkte für Erfolge:
    0
    achjeh, nun driften wir wirklich voll vom Thema weg.
    nein von nicht passt war keine Rede, nicht immer jede Antwort als Angriff auf die eigene Persönlichkeit werten, ein schlimmes Problem der WEB2 Generation
    Ich sah nur keinen Zusammenhang und dachte mir, "nun das sagst du ihr jetzt"

    /me kontert mit zwei Grinsemännlein :p:p
     
  15. Rebekka Revnik

    Rebekka Revnik Superstar

    Beiträge:
    1.081
    Zustimmungen:
    24
    Punkte für Erfolge:
    49
    Ach nimms nicht so ernst, könnte ja jetzt drei reinmachen aber wo soll das noch hinführen *gg*
    Hauptsache es hilft ein wenig was ich hier schreibe (wird eh immer weniger aber nicht wegen dir)
     
  16. Patrick Lawson

    Patrick Lawson Nutzer

    Beiträge:
    86
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    gut seid ihr wieder zurückgekommen und euch nicht wirklich in die haare geraten...

    eure anregungen und LlAtan2 - Second Life Wiki hat mir die lösung gebracht:

    //Function with input of a vector determining the position of a target and returning
    //a string with the literal compass-direction of that target towards your position
    //by Ramana Sweetwater 2009/01, any use allowed license :)
    //corrected by Patrick Muggins

    string compass (vector target)
    {

    vector source = llGetPos();
    list DIRS =["W","NW","N","NE","E","SE","S","SW","W"];
    integer index = llCeil(3.5 - (4 * llAtan2(target.y - source.y, target.x - source.x) / PI));
    return llList2String(DIRS, index);

    }
    mein navi-pfeil rotiert nun brav in richtung ziel...

    merci!
     
  17. Rebekka Revnik

    Rebekka Revnik Superstar

    Beiträge:
    1.081
    Zustimmungen:
    24
    Punkte für Erfolge:
    49
    Tja hättest doch gleich geschrieben dass du nen Kompass willst. Es war immer nur von einer globalen Koordinate die Rede...
     
  18. Patrick Lawson

    Patrick Lawson Nutzer

    Beiträge:
    86
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    wollte keinen Kompass der nach norden zeigt, sondern ein navi welches mir die richtung zu einer globalen koordinate von meiner aktuellen position angibt. aber mit llAtan2 kann ich nun meine soll/ist pos verwursteln...
     

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden