Objekt langsam ausrichten

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

Blackside

Betreff: Objekt langsam ausrichten

BeitragDo, Feb 19, 2009 21:47
Antworten mit Zitat
Benutzer-Profile anzeigen
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 probiert und DeltaYaw/DeltaPitch,
aber ich kriege es einfach nicht richtig gebacken Sad

MFG Blackside
Hier sollte eigentlich eine Signatur stehen!
 

Fredko

BeitragDo, Feb 19, 2009 21:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Einfach die Rotation klein halten.
Zum Beispiel das Ergebnis durch 10 teilen, sodass sich das Raumschiff
sehr langsam dreht.
!

Blackside

BeitragDo, Feb 19, 2009 22:00
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Feb 19, 2009 22:17
Antworten mit Zitat
Benutzer-Profile anzeigen
evtl die drehung in float variablen speichern( vermute daher kommt es das der checkpoint nichtm ehr getroffen wird..)

Blackside

BeitragDo, Feb 19, 2009 22:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein, daran liegt es nicht Sad (ist in Float gespeichert)
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

BeitragDo, Feb 19, 2009 22:32
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Laughing
(ich finde modellbildung sehr schön =))
MFG Darren

Blackside

BeitragDo, Feb 19, 2009 22:40
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Feb 19, 2009 23:32
Antworten mit Zitat
Benutzer-Profile anzeigen
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

hectic

Sieger des IS Talentwettbewerb 2006

BeitragFr, Feb 20, 2009 0:34
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Feb 20, 2009 9:22
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Feb 20, 2009 14:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Kannst du mir vll. mal ein Beispiel geben, Darren?
ich komme damit irgendwie nicht klar :S
Hier sollte eigentlich eine Signatur stehen!

hectic

Sieger des IS Talentwettbewerb 2006

BeitragFr, Feb 20, 2009 14:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie du schon ganz am Anfang mit AlignToVector probiert hast, setze den Parameter tempo anhand der Entfernung zum Checkpoint fest. Je näher dein Objekt dem Chekpoint kommt, muß der Parameter größer werden. Da ich deine Spiele-Dimensionen nicht kenne, fange mal zuerst mit 1.0/Entfernung an. Soll es sich schneller drehen, so erhöhe die 1.0.

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

BeitragFr, Feb 20, 2009 16:02
Antworten mit Zitat
Benutzer-Profile anzeigen
hups ich wusste garnicht, dass aligntovector einen tempoparameter hat xD tut mir leid.
MFG Darren

Blackside

BeitragFr, Feb 20, 2009 16:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke ihr beiden, ihr habt mir echt geholfen.
Hectics Methode klappt super Very Happy
Hier sollte eigentlich eine Signatur stehen!

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group