• Bitte schaltet eure Ad Blocker aus. SLinfo kann nur betrieben werden, wenn es durch Werbung Einnahmen erzielt. Vielen Dank!!
  • 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.
  • 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.

ScripterIn für ein Rotations-Problem gesucht

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
 
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:
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
 
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.
 
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.

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
 
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
 
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.
 
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
 
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)
 
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!
 
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...
 

Users who are viewing this thread

Zurück
Oben Unten