Also ich muss als erstes sagen, dass ich leider erst in der 10Klasse bin und deswegen noch mathematische probs bei 3d programmierung habe.
so habe ich jetzt endlich herrausgefunden, welche rotation ein model benutzen muss, damit es zu einem andren guckt. Das is ja ganz gut wenn man weiss in welche richtung ein Bot gucken muss.
Ich benutze folgenden Code, den ich mir mit Hilfe von irgentwelchen Mathe Sites und nem Tut von DGL zusammengebastelt habe. Der auch funzt.
Code:
function winkel(x1,z1,x2,z2: GLFloat):GLFloat;
var
hyp,tmprot: glfloat;
relx,rely: glFloat;
begin
relx:=x2-x1;
rely:=z2-z1;
hyp:=sqrt(relx*relx+rely*rely);
relx:=relx/hyp;
rely:=rely/hyp;
tmprot:=arcsin(rely)*60;
if relx>=0then
tmprot:=180-tmprot;
tmprot:=tmprot-90;
if tmprot<0then tmprot:=360+tmprot;
result:=tmprot;
end;
den satz des pythagoras kann ich ja aber mit arcsin bin ich echt überfordert. Denn der Bot guckt zwar jetzt in die richtige richtung, aber ich kann ihn irgentwie nicht mit der gleichen funktion nach vornelaufen lassen, mit der ich mein spieler model bewege (dessen Rotation wird durch maus bestimmt). Deshalb musste ich mir eine sehr hässlige funktion schreiben mit der er auch gehen kann, aber nicht so gut halt.
Mein spieler bewegt sich so
Code:
X := X -sin(rot*pi/180)*FrameTime/s_forw;
Z := Z +cos(rot*pi/180)*FrameTime/s_forw;
nach vorne.
Ich hoffe, die mathe genies hier wissen was ich falsch mache und wie meine Winkel funktion eigentlich gehen müsste.
Achja, die beiden x und z werte, die ich in die funktion eingebe, stellen die vektoren da, für die anwendung brauchte ich nix 3 dimensionales...
also x1,z1 is z.B. die pos vom Spieler und x2,z2 die vom bot.
Hoffe das war halbwegs verständlich
Registriert: Do Jun 19, 2003 10:44 Beiträge: 991 Wohnort: Karlsfeld (nahe München)
Code:
function PunktzupiWinkel(X,Y:Double):Double;
begin
if X =0then
if Y > 0then result :=0.5*pielse result:=1.5*pi
else{X <> 0}
if X > 0then result :=Arctan(Y/X)else result :=Arctan(Y/X)+pi;
end;
Diese Funktion berechnet den Winkel den ein Punkt zum Ursprung des Koordinaten System hat. Möchte man nun wissen in welchen Winkel Punkt1 zu Punkt 0 hat so muss man den Punkt 0 in den Ursprung verschieben.
Nehmen wir mal an wir haben
X0 := 3
Y0 := 7
X1 : = 8
Y1 : = -2
So wäre X1 5 weiter rechts als X0 (X1-X0),
und Y1 -9 weiter oben als Y0 (Y1-Y0) (also im Enteffekt 9 weiter unten)
Wir erhalten also im Prinzip einen Vektor der von P0 zu P1 Zeigt.
Wir müssen meine Funktion nur noch entsprechent aufrufen:
ja cool scheint ja ganz einfach zu sein.
klar ist es wichtig dass ich das zum kompletten verständnis mal in mathe durchnehmen sollte, aber das würd ja locker noch n paar monate dauern bis ich dafür grad mal die grundlagen lerne... solange wollte ich dann doch nich warten.
Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.