Objekt langsam ausrichten
Übersicht

![]() |
BlacksideBetreff: Objekt langsam ausrichten |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
Ich wollte wissen wie ich Objekte langsam an einen Punkt ausrichten kann. Wenn ein Raumschiff jetzt z.B Checkpoints im 3D Raum abfahren soll. Wenn ein Checkpoint erreicht ist, soll er sich langsam zum nächten ausrichten. Ich habe es schon mit AlignToVector ![]() ![]() ![]() aber ich kriege es einfach nicht richtig gebacken ![]() MFG Blackside |
||
Hier sollte eigentlich eine Signatur stehen! |
Fredko |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Einfach die Rotation klein halten.
Zum Beispiel das Ergebnis durch 10 teilen, sodass sich das Raumschiff sehr langsam dreht. |
||
! |
![]() |
Blackside |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nun, das hatte ich schon probiert, jedoch dreht er dann immer noch sehr schnell.
Und wenn ich durch 100 teile(wo es schon besser aussieht), trifft er die Checkpoints nicht mehr alle und fliegt dann immer im Kreis drumherum.... Ich will, das er in einer schönen kurve durch den checkpoint in richtung des nächsten fliegt, und dann gerade darauf zu fliegt, bis er ihn wieder berührt.... |
||
Hier sollte eigentlich eine Signatur stehen! |
da_poller |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
evtl die drehung in float variablen speichern( vermute daher kommt es das der checkpoint nichtm ehr getroffen wird..) | ||
![]() |
Blackside |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nein, daran liegt es nicht ![]() Es wird daran liegen, das die Checkpoints nicht immer gleichweit entfernt sind, und wenn sie dann einmal nicht weit voneinander entfernt sind, ist das raumschiff noch nicht vollständig ausgerichtet... hier mal der code: Code: [AUSKLAPPEN] npitch = EntityPitch(con\pivot)+DeltaPitch(con\pivot,c\mesh)/100
nyaw = EntityYaw(con\pivot)+DeltaYaw(con\pivot,c\mesh)/100 RotateEntity con\pivot,npitch,nyaw,0 dabei ist con\pivot das Raumschiff und c\mesh der checkpoint P.s.: npitch und nyaw sind Floats |
||
Hier sollte eigentlich eine Signatur stehen! |
Darren |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Darren hat Folgendes geschrieben: Um den Winkel erst einmal zu berechnen bedarf es der Formel für Winkelberechnungen im R³: http://de.wikipedia.org/wiki/S...Geometrie) siehe schnittwinkel für Vektoren Vielleicht könntest du den winkel um den du pro schleifendurchlauf rotierst abhängig vom noch zu drehenden winkel machen: a = gewünschter winkel ( aktueller winkel + schnittwinkel(siehe oben)) b = aktueller winkel c = drehwinkel (winkel um den pro schleifendurchlauf gedreht werden soll) d = schnellster Drehwinkel c = ((a - b)/a)*d und dann: b = b + c Ist also ein linearer rückkoppelungs prozess ![]() |
||
MFG Darren |
![]() |
Blackside |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das geht irgenwie garnicht Oo
hab ne Funktion erstellt: Code: [AUSKLAPPEN] Function CalcAngle#(curang#,angle#,fast#)
Local dreh# = ((angle - curang)/angle)*fast curang=curang+dreh Return curang End Function |
||
Hier sollte eigentlich eine Signatur stehen! |
Darren |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Und was daran geht nicht? Ich hoffe du machst das für alle drei objektachsen! um den jeweiligen rotationswinkel für eine achse zu berechnen musst du jeweils die blickrichtung und den richtungsvektor zum objekt auf eine koordinatenebene projizieren und zwischen den projizierten vektoren den winkel ausrechen. projektion in eine koordinaten ebene geht ganz einfach indem man bei beiden vektoren die gleiche komponente raushaut und gleich null setzt. | ||
MFG Darren |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Man könnte auch immer dann den nächsten Checkpoint anpeilen, wenn sich die Entfernung des vorherigem vergrößert hat. Dann würde man jegliche Toleranz auf das minimale eingrenzen und genau spezifisch den aktuellen Gegebenheiten das Objekt anpassen.
Also, anstelle: If Sqr(blub)<X Then NächsterCheckpoint dann lieber: Entfernung1=Sqr(blub) If Entfernung1>Entfernung2 Then NächsterCheckpoint Entfernung2=Entfernung1 |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
Darren |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Dann ist aber trotzdem noch das problem der langsamen ausrichtung. Aber ich bin mir total sicher, dass mein modell richtig ist, wenn man es richtig verwendet. vielleicht gibt esnoch eine schnellere methode, aber mir fällt keine ein. | ||
MFG Darren |
![]() |
Blackside |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kannst du mir vll. mal ein Beispiel geben, Darren?
ich komme damit irgendwie nicht klar :S |
||
Hier sollte eigentlich eine Signatur stehen! |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wie du schon ganz am Anfang mit AlignToVector![]() Einen Checkpointwechsel solltest du denoch über eine Distanzmessung nur im Vergleich zur alten Distanzmessung machen, so wie ich es bereits beschrieben hatte. Andere komplizierte Selbberechnungen der Winkel ist erst dann notwendig, wenn man gewünschte Sachen nicht mit AlignToVector erledigen kann. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
Darren |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hups ich wusste garnicht, dass aligntovector einen tempoparameter hat xD tut mir leid. | ||
MFG Darren |
![]() |
Blackside |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke ihr beiden, ihr habt mir echt geholfen.
Hectics Methode klappt super ![]() |
||
Hier sollte eigentlich eine Signatur stehen! |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group