GLBasic forum

Other languages => GLBasic - de => Topic started by: Schranz0r on 2007-May-26

Title: [3D Problem] Cam der Mausrichtung folgen lassen
Post by: Schranz0r on 2007-May-26
Hi

Wie der Titel schon sagt ich brauche eine Bewegung der Cam die mit der Drehung der Maus mitgeht!

So wie es bei Egoshootern der fall ist.


Einer eine Idee ?

Bin mit WPShadow schon am verzweifeln!!!
Title: [3D Problem] Cam der Mausrichtung folgen lassen
Post by: Baggi on 2007-May-26
Hi SchranzOr,

ich hab mal mit einem 3rd Person
Shooterangefangen, "Kasems Lagoon"
kannste dir runterladen
http://www.iup.physik.uni-bremen.de/~mieruch/KL.zip


Also die Kamerabewegung ist nicht
ganz so toll wie in professionellen
Spielen, aber geht schon.

************
Das Prinzip ist folgendes:
MOUSESTATE mx,my,b1,b2 fragt im 2D
Modus die Mauskoordinaten ab, also
zum Beispiel mx von 0 bis 639 und
my von 0 bis 479. Die mx-Bewegung der
Maus soll in eine Drehung der Kamera um
den Winkel phi überführt werden. Das heißt,
wenn mx=359, dann hat sich die Kamera
einmal im Kreis gedreht und mx muss
wieder auf 0 gesetzt werden.
Die my-Bewegung soll in eine Drehung um
den Winkel theta überführt werden, also
so das die Kamera nach unten und oben
gerichtet ist. Da muss man sich dann für
einen Öffnungswinkel entscheiden, z.B. von
-90 Grad bis 90 Grad (senkrecht nach unten
und oben). Man muss also eine Transformation
für phi von 0 bis 639 auf 0 bis 359 und eine
für theta von 0 bis 479 auf -90 bis 90
realisieren.
************

Eigentlich sollte ich sowas mal sauber
programmieren und zu den
Code Schnipseln stellen. Mach ich vielleicht
noch.


Jetzt mal zum Code von "Kasems Lagoon":

------------------------------------
Der Code ist ziemlich hingeschmiert und
dadurch auch ziemlich schwer
nachzuvollziehen.

Ich versuche mal das nötige zu
beschreiben um die Kamerabewegung zu
realisieren:

1. In der Hauptschleife (bei mir main:)
muss die Maus abgefragt werden
MOUSESTATE mx,my,b1,b2

Die Mausabfrage läuft innerhalb der
X_MAKE2D Umgebung. Die Auflösung in
dem Spiel ist 640x480, also läuft
mx von 0 bis 639 und my von 0 bis 479.

2. Die Kamerabewegung in y-Richtung
muss beschränkt sein. Dafür definiere
ich zwei neue Variablen. Wenn my<70 ist,
dann ist my_offset=70-my.
Und noch myschalter=240-my.

3. Die Steuerung der Maus für
die horizontale Bewegung ist in der
sub "maus_phi". Es geht darum, dass
sich eine Variable immer zwischen
0 und 360 Grad befindet, egal wie
man die Maus verschiebt.
Damit die Bewegung schön smooth ist,
unterteile ich jeden Winkel nochmal in
4 Teile mit mx=mx/4+mxschalter.
Also stell dir vor du fängst an die
Kamera nach rechts zu drehen, indem du
die Maus nach rechts schiebst. Wenn
mx>=361 dann hat sich die Kamera
um 90 Grad gedreht, also 360/4.
dann wird die Maus mit SETMOUSE
wieder auf 1 gesetzt und mxschalter=90.
Wenn mxschalter=90. und mx>=361 dann
wird mx wieder 1 und mxschalter=180, weil
die Drehung jetzt wieder um 90 Grad weiter
ist. Das geht jetzt immer so weiter.
Damit ist die Drehung um phi erledigt.


4. Die Kamerabewegung findet jetzt in der
Sub "kamera" statt. Zum einen muss die
Kamera immer der Spielfigur folgen, was
in den ganzen IF KEY(17) usw. abfragen erledigt
wird.
Dann wird die Kamera auf die Position
sp1,sp2,sp3 für x,y,z gesetzt und auf
zp1,zp2,zp3 gerichtet. Hier ist
ziemlich viel gebastelt, aber entscheident ist,
das die Position der Kamera mit cos(mx)
und sin(mx) in der Ebene geht, und mit
my über my_offset und myschalter für oben und unten.
Verdammt das versteht ja keine Sau, die Zeile
ist dermaßen kryptisch, ich verstehs selbst
nicht.



Also ich glaube es hat keinen wirklichen
Sinn den Code von Kasems Lagoon durchzugehen.

Ich hoffe du hast das Grundprinzip verstanden.

Baggi
Title: [3D Problem] Cam der Mausrichtung folgen lassen
Post by: Schranz0r on 2007-May-26
Hat sich erledigt, wir haben es selber rausgefunden :D

Trotzdem danke !