Gamestudio Links
Zorro Links
Newest Posts
Zorro 2.70
by jcl. 09/29/25 09:24
optimize global parameters SOLVED
by dBc. 09/27/25 17:07
ZorroGPT
by TipmyPip. 09/27/25 10:05
assetHistory one candle shift
by jcl. 09/21/25 11:36
Plugins update
by Grant. 09/17/25 16:28
AUM Magazine
Latest Screens
Rocker`s Revenge
Stug 3 Stormartillery
Iljuschin 2
Galactic Strike X
Who's Online Now
1 registered members (TipmyPip), 18,449 guests, and 6 spiders.
Key: Admin, Global Mod, Mod
Newest Members
krishna, DrissB, James168, Ed_Love, xtns
19168 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
Relative Drehung zu einer Entity - Kameraproblem #320965
04/26/10 09:16
04/26/10 09:16
Joined: Apr 2008
Posts: 144
Germany | Niedersachsen (Lower...
Roxas Offline OP
Member
Roxas  Offline OP
Member

Joined: Apr 2008
Posts: 144
Germany | Niedersachsen (Lower...
Hey Leute
ich mach im Moment 'ne RPG-Pause und hab ein wenig mit Kameracodes rumgespielt und dann aus lauter langeweile Resident Evil 5 gespielt.

Da is mir aufgefallen, dass Chris der Kamera mit dem Blick folgt oder wenn er zielt, dass er dann mit der Pistole auf die Mitte des Bildschirms zielt. Wenn man die Maus nach rechts bewegt, dann dreht auch Chris sich nach rechts immer über seine Schulter gesehen.

Jetzt tun sich mir einige Fragen auf, denn ich hab versucht so eine Art von Kamera nach zu programmieren aber irgendwie bin ich zu keinem Ergebnis gekommen.

Ich brauche quasi einen Punkt der sich mit dem Spieler mitbewegt sowohl in der Drehung als auch vorwärts, rückwärts, seitwärts, hoch und runter sehend. dieser Punkt muss aber ein anderer sein, als der Ursprungspunkt des Models, er muss rechts hinter dem spieler modell sein und das die ganze Zeit, da man dem Spieler über die Schulter gucken möchte.

Hat einger Erfahrung mit dieser Art von Schulterkamera und könnte mir n paar tipps geben wie man sowas umsetzt?

Hoffe ihr könnt mir dabei helfen!

Gruß Roxas~

Re: Relative Drehung zu einer Entity - Kameraproblem [Re: Roxas] #320971
04/26/10 11:05
04/26/10 11:05
Joined: Nov 2008
Posts: 946
T
the_clown Offline
User
the_clown  Offline
User
T

Joined: Nov 2008
Posts: 946
Eigentlich relativ simpel:

vec_set(camera.x,vector(-100,-20,5)); // spiele mit diesen Werten
vec_rotate(camera.x,camera.pan);
vec_add(camera.x,player.x);
vec_set(player.pan,camera.pan);

Das ist bloße Trigonometrie; Erklären kann ich's leider nicht. grin
Das mit der Kopf- / Armbewegung beinhaltet aber Bones-Rotationen und ist schon etwas komplizierter.
Dazu kommt dann natürlich noch die Kameradrehung selbst, aber ich glaube, das bedarf keiner Erklärung.

Re: Relative Drehung zu einer Entity - Kameraproblem [Re: Roxas] #320972
04/26/10 11:12
04/26/10 11:12
Joined: Sep 2003
Posts: 5,900
Bielefeld, Germany
Pappenheimer Offline
Senior Expert
Pappenheimer  Offline
Senior Expert

Joined: Sep 2003
Posts: 5,900
Bielefeld, Germany
Du brauchst eine Variante von folgendem:


var pos_distance = 100;

vec_for_angle(temp, my.pan);//übersetzt den Blickwinkel in einen Punkt um 1 Quant vom Nullpunkt der Welt in Blickrichtung
vec_scale(temp, pos_distance);//versetzt diesen Punkt um einen Abstand von pos_distance vom Nullpunkt entfernt
vec_add(temp, my.x);//versetzt diesen "Versatz" um den Ort der my-Entity

Wenn Du aber jetzt nicht einen Punkt vor der Entity brauchst, sondern hinter ihr. z.B. damit die Kamera von dort über die Schulter schaut,
dann fügst Du nach vec_for_angle(temp, my.pan); diesen Winkel hinzu:
temp.pan += 180;// so schaut die Kamera in den Nacken der my-Entity
temp.pan += 110;// so über die eine Schulter
usw.

Re: Relative Drehung zu einer Entity - Kameraproblem [Re: Pappenheimer] #320976
04/26/10 12:04
04/26/10 12:04
Joined: Apr 2008
Posts: 144
Germany | Niedersachsen (Lower...
Roxas Offline OP
Member
Roxas  Offline OP
Member

Joined: Apr 2008
Posts: 144
Germany | Niedersachsen (Lower...
Hey Danke für eure Antworten und Hilfestellungen.

Ich hab jetzt mal mit beidem herum gespielt undn bissle kombiniert. also das funktioniert schon ganz gut ^^

Hab die Steuerung erstmal bissle RE-mäßig angepasst. Das nächste was nun kommt is wohl die Steuerung der Bones des Oberkörpers wenn er nach oben oder unten zielen soll.

Wie gesagt erstmal Danke. funktioniert soweit gut. Ich poste wieder in diesen Thread wenn mir noch was übern Weg läuft.

Bis dahin

Gruß Roxas~

Re: Relative Drehung zu einer Entity - Kameraproblem [Re: the_clown] #321024
04/26/10 17:29
04/26/10 17:29
Joined: Sep 2003
Posts: 5,900
Bielefeld, Germany
Pappenheimer Offline
Senior Expert
Pappenheimer  Offline
Senior Expert

Joined: Sep 2003
Posts: 5,900
Bielefeld, Germany
@ the clown:
Auch nicht schlecht, es gibt anscheinend viele Möglichkeiten.

Re: Relative Drehung zu einer Entity - Kameraproblem [Re: Pappenheimer] #321029
04/26/10 18:05
04/26/10 18:05
Joined: Jul 2007
Posts: 424
EUROPE
maslone1 Offline
Senior Member
maslone1  Offline
Senior Member

Joined: Jul 2007
Posts: 424
EUROPE
hier meine variante aus dem 2.5D opensource spacegame:

http://www.opserver.de/wiki/index.php/2.5D_Spaceshooter_V0_1x_-_OpenSource_by_maslone1

Code:
function rotate_rel(VECTOR* meentity, VECTOR* youentity, ANGLE* youangle, VECTOR* distanz)
{
	vec_set(meentity.x, distanz);
	vec_rotate(meentity.x, youangle.pan);
	vec_add(meentity.x, youentity.x);
	
	//	rotate_rel(testpos.x, ent_ShipDummie.x, ent_ShipDummie.pan,  vector(50, 100, 100));
	// Beispiel
}



Code:
function Cam1()
{
	
var cam_goal_dist = -40;					//Variable for the camera-distance

camera.x = Ships[1].x;		//the x and y position is always the player x and y position
camera.y = Ships[1].y;
camera.z = Ships[1].z;	
	
while(1){	

rotate_rel(camera.x, Ships[1].x, Ships[1].pan, vector(cam_goal_dist,0,0));

if(key_u != 0) { cam_goal_dist += 2*time_step; }
if(key_i != 0) { cam_goal_dist -= 2*time_step; }

camera.tilt= 0;
camera.roll= 0;
camera.pan = Ships[1].pan;


wait(1);	
 }
}



Die relative Poistion zu einer Ziel-Entity änderst du unter der funktion rotate_rel(camera.x, Ships[1].x, Ships[1].pan, vector(cam_goal_dist,0,0));


unter vector(cam_goal_dist "X", 0 "Y",0 "Z")
(unter "" angeführten achsen sind zur änderung der relativen position da)


Der große Vorteil hier..... kann mich aber irren,
du kannst sehr einfach die kamera in echtzeit verschieben und in andere richtungen drehen. Die Verwendbarkeit ist also recht groß. Einer der Gründe warum ich es so geschrieben habe.....
aber möglich dass es noch viel bessere und schnellere lösungen gibt.


Last edited by maslone1; 04/26/10 18:13.

A8c, Blender, FlStudio, Unity3d
Re: Relative Drehung zu einer Entity - Kameraproblem [Re: Roxas] #321113
04/27/10 08:26
04/27/10 08:26
Joined: Apr 2008
Posts: 144
Germany | Niedersachsen (Lower...
Roxas Offline OP
Member
Roxas  Offline OP
Member

Joined: Apr 2008
Posts: 144
Germany | Niedersachsen (Lower...
Ich habe für die Kamera eine etwas abgewandelte Form genommen, mich zwar stark an Pappenheimer und the clown orientiert aber irgendwie noch nen bisschen selber was reingemixt und das funktioniert soweit ganz gut.

Ich Berechne mit Sin und Cos ne Position neben dem Spieler die immer rechts von ihm is. Das is mein Ankerpunkt für meine Kamera. Die setze ich nämlich dahinter und lasse sie dann in Richtung des Ankerpunktes gucken und diesem auch in der Drehung folgen. Damit konnte ich das nach oben und nach unten Sehen gut umsetzen.


Hier mein Code als Beispiel:

Code:
// Engine Funktion - Kamera script
var camera_distance = 75;
var cam_height = 0;
var bone_height = 0;

function handle_camera() 
{
	// Vectoren
	VECTOR temp;
	VECTOR anker;
	VECTOR tempvect;
	
	// Durch bewegen der Maus wird die Kamera gesteuert, aber nur unter bestimmten Umständen
	if(key_d == 0 && key_a == 0 && key_shift == 1){character.pan -= mouse_force.x * 10 * time_step;}
	else if(key_shift == 0){character.pan -= mouse_force.x * 10 * time_step;}
	
	// Kamera hoch und runter blicken lassen
	cam_height -= mouse_force.y * 8 * time_step;
	cam_height = clamp(cam_height,-50,50);
	
	// Kamera Anker (Ankerpunkt der Kamera, orientiert sich am Spieler)
	anker.x = character.x + 25 * sin(character.pan);
	anker.y = character.y - 25 * cos(character.pan);
	anker.z = character.z + 35;
	
	// Kamera orientiert sich am Ankerpunkt
	camera.x = anker.x - camera_distance * cos(character.pan);
	camera.y = anker.y - camera_distance * sin(character.pan);
	camera.z = anker.z + cam_height;
	
	// Kamera blickt in die Richtung des Ankerpunktes (Also gleichzeitig in Spielerrichtung)
	vec_set(temp,anker.x);
	vec_sub(temp, camera.x);
	vec_to_angle(camera.pan, temp);

	// Billige Kamera Kollision
	trace_mode = IGNORE_ME | IGNORE_PASSABLE;
	result = trace(my.x,camera.x);
	if(result > 0) { vec_set(camera.x,target.x); }
	
	// Steuerung der Rückenbones für Zielmodus
	if(mouse_right == 1 && character.move_mode == 1)
	{
		bone_height = cam_height;
		ent_bonerotate_parent(character,"Bone1",vector(0,-bone_height,0));
	}	
	
	if(mouse_right == 0)
	{
		if(bone_height > 0)
		{
			ent_bonerotate_parent(character,"Bone1",vector(0,-bone_height,0));
			bone_height -= 20 * time_step;
		}
		if(bone_height < 0)
		{
			ent_bonerotate_parent(character,"Bone1",vector(0,-bone_height,0));
			bone_height += 20 * time_step;
		}
	}
}



Vielleicht hilfs ja jemandem ^^
Die Kamera ist zwar nicht wirklich "smooth" so wie in RE5, aber sie bietet statisch dass, was RE5 auch kann

Gruß Roxas~


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