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

Rotation: Point at?

Jhary Priestly

Aktiver Nutzer
Okay, ich hab 'n totalen Block, und finde seit mehreren tagen die Lösung nicht... und ich weiss, daß es die gibt (gab).

Gegeben sei ein Pbjekt A und ein Zielpunkt Z (ermittelt in Sim-Koordinaten mittels llDetectedPos(i) aus einem sensor-Event heraus).

Ich will nichts weiter als eine Rotation des Würfels A, so das Fläche 1 der Oberfläche (oder von mir aus jede andere) sich in Richtung Z dreht - aber nur um die z-Achse. Mein Würfel soll also nicht "kippen", sondern "nur" um eine Achse drehen.

Wenn ich
Code:
vector vRichtung = llVecNorm( llDetectedPos(i) - llGetPos() (;
berechne, bekomme ich die Richtung, in die das Ziel liegt (innerhalb der selben Sim, im Root-Prim) - aber ich hab den totalen Blackout, wie von da weiter...

Kann mir jemand aus der Patsche helfen, bitte?

[Anmerkung: Ich habe zwei Lösungen bekommen, die mir beide gut gefallen haben - die von Kim Yebut direkt hier drunter und eine von thinkangel McAlpine, die m.E. nicht übersehen werden sollte]
 
moin,
hab mal was zusammengestellt.

Code:
integer folge=FALSE;

default
{

    touch_start(integer total_number)
    {
        if (folge == FALSE)
        {
            llSetTimerEvent(2.0);
        }
        else llSetTimerEvent(0.0);
    }
    
    timer()
    {
        vector zielObjekt_koordinaten = llList2Vector( llGetObjectDetails( llGetOwnerKey(llGetKey()), [OBJECT_POS]), 0 ); //den primbesitzers aktuelle koordinaten ermitteln
        if (zielObjekt_koordinaten != ZERO_VECTOR)
        {
            vector differenz = zielObjekt_koordinaten - llGetPos();
            vector up = < 0.0, 0.0, 1.0 >;
            vector left = llVecNorm(up % differenz);
            vector fwd = llVecNorm(left % up);
            rotation zielrichtung = llAxes2Rot(fwd, left, up);
            llSetRot(zielrichtung);
        }
    }
}
ich hoffe das hilft dir auf die Sprünge :)
zum Testen einfach mal in einen Standartprim werfen, anklicken
und drum rum laufen.
 
Ich denke mit Point at ist das Look at gemeint ^^ mal eben gebaut und läuft in SL:

Code:
default
{
state_entry()
{
llSensorRepeat("","",AGENT,10.0,PI,2);
}

sensor(integer total_number)
{
vector eigen = llGetPos();
vector ziel = llDetectedPos(0);
ziel.z = eigen.z;
llLookAt(ziel,1,1);
}
}

Nochmal dazuschreiben was es macht: ein Prim dreht sich mit den Script immer zum nächsten Avatar (gefunden über das llSensor, in 10 meter umkreis, alle 2 Sekunden), dabei bleibt die z-Achse aber grade (ziel.z=eigen.z)

MfG
Kim
 
Wunderprächtig, so etwas hatte ich. Und gab gleich zwei *vor-die-Stirn-KLATSCH-en*

Kims Lösung besticht durch ihre elegante Einfachheit (dreht aber ausdrücklich Face 0 eines Würfels zum Ziel), Thinkangel hat das, was ich ursprünglich gesucht hatte. (wobei, wenn ich das anmerken darf, llGetOwnerKey(llGetKey()) lässt sich durch llGetOwner() ersetzen ;-))

Mittlerweile habe ich aus User-Profilen noch eine andere Lösung gefunden, die ich aber nicht wirklich mochte:

Code:
rotation gAngle=llRotBetween(<1.0, 0.0, 0.0>*ZERO_ROTATION, vZiel - vIch);
vZiel = llRot2Euler(gAngle);
vZiel.x = 0.0;
vZiel.y = 0.0;
gAngle = llEuler2Rot( vZiel );
llRotLookAt(gAngle, 0.1, 0.1);
Wie gesagt, mochte ich.

Per PM und von Archon wurde mir geraten, llSetStatus zu verwenden - bei nicht-physischen Objekte hatte das aber genau "null" Effekt.

Aber Klasse und vielen Dank an alle, ihr habt mir sehr weiter geholfen. Und eigentlich müsste ich die beiden letzten Antworten als "Beste" markieren, aber ich klicke die Kürzere Lösung an - werde aber selbst thinkangels Ansatz verwenden (weil ich sonst um ein Loch in falscher Ausrichtung rumarbeiten müsste).

Echt - Danke!
 

Users who are viewing this thread

Zurück
Oben Unten