• 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-script... geschwindigkeit einstellen

Code:
//http://wiki.secondlife.com/wiki/LlSetRot
rotation rot_xyzq;
 
default
{
    state_entry()
    {
        llSetTimerEvent(0.1);
        vector xyz_angles = <0,0,0.1>;
        vector angles_in_radians = xyz_angles*DEG_TO_RAD; 
        rot_xyzq = llEuler2Rot(angles_in_radians);
    }
      timer()
    {
        llSetRot(llGetRot()*rot_xyzq);
    }
}
das wären ja 0.1 ° in 0.1 sekunde, also 360 ° in 6 stunden?!
<0,0,0.001> geht auch, was dann wohl 600 h entsprechen sollten ...
was hälst du davon?

iwie passt meine rechnung nicht. wieviel grad sind denne nu bei <0,0,0.1> in einer sekunde, und wie berechne ich das?
 
wenn nicht, dann nerv ich dich inworld ^^
und ja, mir war auch so. "das wären ja 0.1 ° in 0.1 sekunde, also 360 ° in 6 stunden"...
aber iwie stimmt das mit der virtuellen wirklichkeit in der noch virtuelleren umgebung überein
 
altes thema, neu aufgewärmt:

kann man iwie auslesen in welcher position sich gerade das prim befindet?
also
achse x = 73°
achse y = 0°
achse z = 0°

kurze zeit später
achse x = 78°
achse y = 0°
achse z = 0°
 
Probiers mal so (nicht getestet):
Code:
ShowRot()
{
    vector v = RAD_TO_DEG * llRot2Euler(llGetRot());
    llSay(0, "achse x = " + (string)v.x + "°");
    llSay(0, "achse y = " + (string)v.y + "°");
    llSay(0, "achse z = " + (string)v.z + "°");
}
 
sorry reb. ja das geht. das hatte ich probiert. allerdings ruckelt da das prim.

ich hatte vergessen zu schreiben das ich diese zeile auslesen lassen wollte:
llTargetOmega(<0,1,0>,PI,1.0)...

mfg markus
 
sorry reb. ja das geht. das hatte ich probiert. allerdings ruckelt da das prim.

ich hatte vergessen zu schreiben das ich diese zeile auslesen lassen wollte:
llTargetOmega(<0,1,0>,PI,1.0)...

mfg markus

Das kannst du dir aus den Kopf schlagen.
Es ist unmoeglich die aktuelle Rotation von llTargetOmega eines nicht physischen Objects auszulesen.
Die Rotation bleibt ein und die selbe bis du sie anhaelst, weil die drehung ausschliesslich vom Viewer verarbeitet wird.

Das bedeutet vereinfacht, der Server weiss noch gar nicht das sich das ding ueberhaupt dreht und deshalb kann ein Script welches auf dem Server liegt und dort verarbeitet wird diesen wert nicht auslesen.

Wenn du also permanent den Rotationswert eines sich drehenden objects abfragen moechtest, musst du die eigentliche Rotation, ohne llTargetOmega via llSetRot, ueber einen sehr schnellen Timer laufen lassen wobei andauernd ein neuer Wert vorgegeben wird.

LG
Dae
 
huhu Dae

diese llsetrot scripte schaffen leider keine fließende bewegungen. es ruckelt in den scripten.
dennoch vielen dank für die antwort

mfg Markus
 
das könnte in einem Sim ohne Lag und mit wenigen Scripten einigermaßen Funktionieren (nur minimales Ruckeln zu sehen), allerdings dürfte das bei etwas lag eventuell genau so ruckeln, da dann der timer nicht mehr so richtig exakt mit 100ms Intervallen arbeitet.

IMHO ist daher die beste Methode für eine gleichmäßige Drehung sowas zu vewenden:

llTargetOmega (llVecNorm(<x,y,z>),0.105,1.0) , d.h. da wird der Richtungsvektor erst normiert (und bekommt dadurch immer die Länge/Größe 1) und man kann die Drehgeschwindigkeit direkt über die Spinrate einstellen, egal wie man nun die Rotationsrichtungen angibt. llVecNorm(<2,4,8>) macht dann in der gesamten Rotationsgeschwindigkeit keinen Unterschied mehr zu llVecNorm(<1,2,4>).

Da aber leider llTargetOmega auch nicht wirklich präzise arbeitet (das dreht je nach Client unterschiedlich schnell... ) kann man einfach immer wieder kurz llSetRot benutzen und dann die Rotation von einem festgelegten Punkt aus neu starten (z.B. jede Sekunde um 6° gedreht positionieren und dann eben die llTargetOmega Rotation wieder neu starten), und das ganze müsste für alle einigermaßen gleichmäßig und exakt sein.
 
hmm okay, dann frag ich mal andersrum. wie kann ich denn ein prim dazu bewegen sich in einem bestimmten bereich zu drehen (alle 3 achsen).
mal ein beispiel: 2 verlinkte prim sollen als scheinwerfer funktionieren. der scheinwerfer soll ja nur nach oben strahlen, und nicht in dem untergrund verschwinden. und die bewegung soll zufällig sein, kein definiertes muster.
also sollte meinetwegen die maximale neigung 45° zur seite betragen und der scheinwerfer sich inerhalb des bereiches frei "bewegen" können

mfg Markus
 
Hast du schonmal daran gedacht statt einfach llLookAt oder llRotLookAt zu benutzen?
Bei passend eingestellter Stärke und Abschwächung mußt du nur noch per Zufallsgenerator passende Koordinaten in dem abzudeckenden Bereich erzeugen, die Bewegung ist dann ruckelfrei, wenn auch nicht unbedingt gleichmässig schnell. Könnte aber einem Suchscheinwerfer entsprechen der nen bestimmten Bereich abdeckt.

MfG
Hannibal
 

Users who are viewing this thread

Zurück
Oben Unten