Gamestudio Links
Zorro Links
Newest Posts
Z9 getting Error 058
by k_ivan. 04/25/26 19:13
ZorroGPT
by TipmyPip. 04/25/26 16:09
Stooq now requires an API key
by jcl. 04/13/26 09:42
Strange "Alien" Skull created with >Knubber<
by NeoDumont. 04/10/26 18:58
400 free seamless texture pack downl. here !
by NeoDumont. 04/08/26 19:55
AUM Magazine
Latest Screens
Dorifto samurai
Shadow 2
Rocker`s Revenge
Stug 3 Stormartillery
Who's Online Now
1 registered members (AndrewAMD), 3,675 guests, and 8 spiders.
Key: Admin, Global Mod, Mod
Newest Members
valino, juergenwue, VladMak, Geir, ondrej
19209 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
3rd Person Kamera #286164
08/23/09 15:48
08/23/09 15:48
Joined: Aug 2009
Posts: 3
Schneaf Offline OP
Guest
Schneaf  Offline OP
Guest

Joined: Aug 2009
Posts: 3
Hallo!

Ich versuche schon seit längerem eine 3rd Person Kamera zu programmieren. Ich habe es auch mit Hilfe von Tutorials ganz einfach gelöst. Hier mal der Code:

Code:
vec_set(camera.x, vector(my.x + fcos(my.pan,-100), my.y + fsin(my.pan,-100), my.z + 50));

my.pan -= mouse_force.x * 20 * time_step;
camera.pan = my.pan;
	
camera.tilt += mouse_force.y * 10 * time_step;
camera.tilt = clamp(camera.tilt,-25,25);



Diese Version hier funktioniert reibungslos. Ich möchte allerdings eine kleine Änderung daran vornehmen...und dies führt zu meinem Problem.

Ich würde den Spieler gerne links oder rechts im Bild haben und nicht direkt vor der Kamera. Ich habe es bereits mit verschiedenen Kosinus und Sinus Funktionen probiert aber ich komme einfach nicht dahinter wie ich dieses Problem lösen kann.

Ich bräuchte mal einen kleinen Denkanstoß.

Danke im voraus.

Mfg
Schneaf

Re: 3rd Person Kamera [Re: Schneaf] #286172
08/23/09 17:10
08/23/09 17:10
Joined: Sep 2003
Posts: 5,900
Bielefeld, Germany
Pappenheimer Offline
Senior Expert
Pappenheimer  Offline
Senior Expert

Joined: Sep 2003
Posts: 5,900
Bielefeld, Germany
Die erst Zeile in Deinem code könntest Du wie folgt schreiben, wenn das Ganze in der Funktion des Spielers steht:

vec_set(temp, my.pan);//übernimmt den Winkel des Spielers
temp.pan += 180;//wenn die Kamera direkt hinter dem Spieler sein soll
//der Wert kann geändert werden, damit die Kamera eher 'schräg' hinter dem Spieler sitzen soll
vec_for_angle(temp, temp);//wandelt den Winkel in einen (Richtungs-)Vektor um
//wenn also der Spieler genau in x-Richtung der Welt schauen sollte, hätte dieser Vektor die Werte (1,0,0), wenn wir den temp.pan nicht nochmal um 180 Grad gedreht hätten, so ist er jetzt (-1,0,0)
vec_scale(temp, 100);//skaliert Richtungsavektor auf 100
temp.z = 50;//setzt die Höhe unabhängig aller vorherigen Änderungen auf einen festen Wert
vec_add(temp, my.x);//addiert den Vektor zur Position des Spielers
vec_set(camera.x, temp);//übergibt die Werte an die Kamera

Mit einer vergleichbaren Aktion versetzt Du den Punkt auf den die Kamera schauen soll neben den Spieler:
vec_set(temp, my.pan);
temp.pan += 90;//Dreh den Winkel so, dass er zur Seite des Spielers schaut
vec_for_angle(temp, temp);//wnadele den Winkel in einen Vektor um
vec_scale(temp, 20);
vec_add(temp, my.x);//addiert die position des Spielers zum Vektor
vec_sub(temp, camera.x);//soll die Richtung von Kamera zur Position neben dem Spieler geben (vielleicht ergibt es aber genau die umgekehrte Richtung, bin mir jetzt nicht sicher)
vec_to_angle(temp, temp);//wandelt den Richtungsvektor in einen Winkel um
vec_set(camera.pan, temp);//übergibt den Winkel an die Kamera

Re: 3rd Person Kamera [Re: Pappenheimer] #286185
08/23/09 19:19
08/23/09 19:19
Joined: Aug 2009
Posts: 3
Schneaf Offline OP
Guest
Schneaf  Offline OP
Guest

Joined: Aug 2009
Posts: 3
Danke!
Ich werds morgen dann mal ausprobieren.

Mfg
Schneaf

Re: 3rd Person Kamera [Re: Schneaf] #286344
08/24/09 20:01
08/24/09 20:01
Joined: Aug 2009
Posts: 3
Schneaf Offline OP
Guest
Schneaf  Offline OP
Guest

Joined: Aug 2009
Posts: 3
Hi!

Also ich bin diesen Code jetzt durchgegangen und habe festgestellt, das der Code zwar das hinbekommt was ich möchte, allerdings nur wenn ich die Bewegung der Maus vernachlässige, sprich der Charakter in eine Richtung schaut.

Ich habe daraufhin meine Code Variante nochmal untersucht und bin zu dem Ergebnis gekommen, das ich die komplett selbe Kameraführung mit nur 2 zeilen Code bekomme, die da wären:

Code:
vec_set(camera.x, vector(my.x + fcos(my.pan,-100), my.y + fsin(my.pan,-100), my.z + 50));
vec_add(camera.x,vector(0,50,0));



Allerdings ist mein Ergebnis noch immer nicht zufriedenstellend. Da sich die Kamera eigenartig mitdreht, sobald ich mit der Maus in eine andere Richtung schauen möchte. Sie kreist irgendwie um den Spieler herum. (Das selbe Problem ist auch bei deinem Skriptvorschlag zu sehen gewesen, ich hätte gern ein Video gemacht aber ich kenn mich mit diesen encodern nicht aus und für 12 Sekunden lade ich kein 60MB file hoch :P)

Um vielleicht zu verstehen was ich erreichten möchte, der sollte sich dieses Gameplay Video zu Dead Space ansehen. So sollte mein Kamera Code in etwa funktionieren: (man beachte die nicht zentrierte Player Entity)

Dead Space Gameplay

Hoffe ihr könnt mir weiterhelfen.

Mfg
Schneaf


Moderated by  HeelX, Lukas, rayp, Rei_Ayanami, Superku, Tobias, TWO, VeT 

Gamestudio download | Zorro platform | shop | Data Protection Policy

oP group Germany GmbH | Birkenstr. 25-27 | 63549 Ronneburg / Germany | info (at) opgroup.de

Powered by UBB.threads™ PHP Forum Software 7.7.1