|
|
Kamera rotieren [GER]
#242350
12/22/08 16:51
12/22/08 16:51
|
Joined: Jul 2008
Posts: 170 Germany, near Mainz
Nicotin
OP
Member
|
OP
Member
Joined: Jul 2008
Posts: 170
Germany, near Mainz
|
Hallo, also mein Problem ist folgendes. Ich möchte das sich die Kamera auf den Pfeiltasten um den mittelpunkt dreht. Ich habe keine ahnung wie ich das machen soll. Es wäre nett wenn mir jemand wenigstens einen Anhaltspunkt geben könnte. Vielen Dank im Vorraus
|
|
|
Re: Kamera rotieren [GER]
[Re: Nicotin]
#242357
12/22/08 17:02
12/22/08 17:02
|
Joined: Jul 2002
Posts: 4,436 Germany, Luebeck
Xarthor
Expert
|
Expert
Joined: Jul 2002
Posts: 4,436
Germany, Luebeck
|
Idee: Durch die Pfeiltasten wird der pan wert der camera beeinflusst, mit diesem wird dann die jeweilige position berechnet. Snippet (C-Script):
var mittelpunkt_pos[3] = 10,50,20; // koordinaten des mittelpunktes
var camera_dist = 500; // 500 = abstand zum mittelpunkt
function camera_control()
{
while(1) // ersetzen durch terminierende kondition
{
camera.pan += 5 * (key_cul - key_cud) * time_step;
vec_set(camera.x,vector(camera_dist,0,0));
vec_rotate(camera.x,camera.pan);
vec_add(camera.x,mittelpunkt_pos);
wait(1);
}
}
Selbes snippet (lite-C):
VECTOR* mittelpunkt_pos = { x=10; y=50; z=20; }
var camera_dist = 500;
function camera_control()
{
while(1)
{
camera.pan += 5 * (key_cul - key_cud) * time_step;
vec_set(camera.x,vector(camera_dist,0,0));
vec_rotate(camera.x,camera.pan);
vec_add(camera.x,mittelpunkt_pos);
wait(1);
}
}
Notizen: #1 Falls die camera sich genau falsch rum dreht, einfach key_cul und key_cud vertauschen. #2 Code ist nicht getestet #3 Code ist nicht optimiert
|
|
|
Re: Kamera rotieren [GER]
[Re: Nicotin]
#242373
12/22/08 18:50
12/22/08 18:50
|
Joined: Jul 2008
Posts: 170 Germany, near Mainz
Nicotin
OP
Member
|
OP
Member
Joined: Jul 2008
Posts: 170
Germany, near Mainz
|
Also Xarthor, deine Lösung hatte fast auf Anhieb geklappt. Am ende deiner Procedur war jedoch der Pan wert der Kamere verschoben. Das habe ich dann einfach mal behoben indem ich es wieder den Mittelpunkt anschauen lassen hab. Jedoch springt er nun jedes Frame beim x,y,pan Wert zwischen - und + hin und her.Das bedeutet er wechselt jedes Frame die Seiten. Ansonsten funktioniert es super.Hier mal der Code:
while(1)
{
camera.pan += 5 * (key_cul - key_cur) * time_step;
vec_set(camera.x,vector(camera_dist,0,210));
vec_rotate(camera.x,camera.pan);
vec_add(camera.x,mittelpunkt_pos);
vec_sub(mittelpunkt_pos,camera.x);
vec_to_angle(camera.pan,mittelpunkt_pos);
camera.tilt = camera_tilt;
camera.z = 210;
wait(1);
}
EDIT: sry für doppelpost. Hab vergessen das ich als letztes geantwortet hab :-(
Last edited by Nicotin; 12/22/08 19:23.
|
|
|
Re: Kamera rotieren [GER]
[Re: Nicotin]
#242400
12/22/08 21:39
12/22/08 21:39
|
Joined: Jul 2002
Posts: 4,436 Germany, Luebeck
Xarthor
Expert
|
Expert
Joined: Jul 2002
Posts: 4,436
Germany, Luebeck
|
Das Springen zwischen + und - kann am pan liegen. Folgendes könnte funktionieren:
while(1)
{
camera.pan = ang(camera.pan + 5 * (key_cul - key_cur) * time_step);
...
}
Wegen doppelpost: So was ist meines Erachtens nicht schlimm so lange du nicht alle 5 minuten schreibst oder immer nur ein paar sätze. Da du den code aber ausprobiert hast und ergebnisse bzw. weitere fragen hast ist das eig. kein problem 
|
|
|
Re: Kamera rotieren [GER]
[Re: Xarthor]
#242414
12/22/08 23:18
12/22/08 23:18
|
Joined: Jul 2008
Posts: 170 Germany, near Mainz
Nicotin
OP
Member
|
OP
Member
Joined: Jul 2008
Posts: 170
Germany, near Mainz
|
Naja, das ist dann ja genau das selbe Problem in grün^^. Denn nun springt es ja immernoch. Es würde funktionieren wenn ich jeden 2. Frame das machen lasse., Ich weiß nur nicht wie ich das machen soll. Vorschläge?
EDIT: Ok, ich habe es gepackt jeden 2. Frame die x,y,pan werte umzudrehen was (meiner Meinung nach) das Problem häte beheben müssen. Doch es ist exakt das selbe und ich kann nicht erkennen woran es liegt.
Last edited by Nicotin; 12/23/08 01:14.
|
|
|
Re: Kamera rotieren [GER]
[Re: Nicotin]
#244817
01/07/09 00:08
01/07/09 00:08
|
Joined: Jul 2008
Posts: 170 Germany, near Mainz
Nicotin
OP
Member
|
OP
Member
Joined: Jul 2008
Posts: 170
Germany, near Mainz
|
while(1)
{
camera_hohe += 1 * (key_cuu - key_cud) * time_step;
camera.pan = ang(camera.pan + 5 * (key_cur - key_cul) * time_step);
vec_set(camera.x,vector(camera_dist,0,210));
vec_rotate(camera.x,camera.pan);
vec_add(camera.x,mittelpunkt_pos);
vec_sub(mittelpunkt_pos,camera.x);
vec_to_angle(camera.pan,mittelpunkt_pos);// und drehe Kamera, so dass er jetzt die Mitte anschaut
if(fraction(i/2)!=0)
{
camera.x = -camera.x;
camera.y = -camera.y;
camera.pan = ang(camera.pan);
}
camera.tilt = 340;
camera.z = camera_hohe;
i+=1;
wait(1);
}
Sorry das ich das nun noch einmal einen double Post machen muss. Aber ich kommem einfach nicht weiter! Also das ist mein momentaner Code. Nun bleibt die Kamera zwar normal aber sie "ruckelt" also das Spiel hat noch normale FPS aber der Level färbt sich blau und wieder normal. Ich brauche dringend Hilfe. Denn alles was ich jetzt noch prgrammieren will baut auf der Kamera auf. Aber die muss dafür erstmal funktionieren! Achso und Xarthor: Könntest dur mir vielleicht deine Funktion erklären? Also was die einzelnen Vector befehle machen weiß ich. Aber ich weiß nicht warum die Kamera dadurch so reagiert. Also wäre nett. Vielleicht komm ich dann jaa uch selbst auf die Lösung. Denn im moment weiß ich nur das es es macht Aber nicht warum^^
Last edited by Nicotin; 01/07/09 00:13.
|
|
|
Re: Kamera rotieren [GER]
[Re: Nicotin]
#245170
01/08/09 18:51
01/08/09 18:51
|
Joined: Jul 2002
Posts: 4,436 Germany, Luebeck
Xarthor
Expert
|
Expert
Joined: Jul 2002
Posts: 4,436
Germany, Luebeck
|
Hi Nicotin, das problem bei deinem code liegt wahrscheinlich darin, dass du den vector mittelpunkt mit vec_sub direkt änderst, er also nicht mehr den anfänglichen wert hat. Ich habe über dein Problem nochmals nachgedacht und bin auf einen recht simplen code gekommen. Die Kamera bewegt sich bei diesem code auf einem zylinder mit dem durchmesser 2*cam_radius. Sie fixiert dabei immer den mittelpunkt (VECTOR), die position des vectors kannst du beliebig ändern. Hier der code:
VECTOR* mittelpunkt = { x=0; y=0; z=0; }
VECTOR* cam_temp = { x=0; y=0; z=0; }
var cam_radius = 100;
var cam_angle = 0;
var cam_speed[2] = { 8, 5 }; // erster wert: rotation, zweiter wert: hoehe anpassen
function control_Camera()
{
while(1)
{
camera.z += cam_speed[1] * (key_cuu - key_cud) * time_step;
cam_angle += cam_speed[0] * (key_cur - key_cul) * time_step;
cam_angle = ang(cam_angle);
camera.x = mittelpunkt.x + cam_radius * sin(cam_angle);
camera.y = mittelpunkt.y + cam_radius * cos(cam_angle);
vec_set(cam_temp,mittelpunkt);
vec_sub(cam_temp,camera.x);
vec_to_angle(camera.pan,cam_temp);
wait(1);
}
}
Und hier das komplette projekt (.c datei + model file) zum runterladen: http://home.arcor.de/xarthor/downloads/rotateCylinder.zip
|
|
|
Moderated by mk_1, Perro, rayp, Realspawn, Rei_Ayanami, rvL_eXile, Spirit, Superku, Tobias, TSG_Torsten, VeT
|