Gamestudio Links
Zorro Links
Newest Posts
AlpacaZorroPlugin v1.3.0 Released
by kzhao. 05/22/24 13:41
Free Live Data for Zorro with Paper Trading?
by AbrahamR. 05/18/24 13:28
Change chart colours
by 7th_zorro. 05/11/24 09:25
Data from CSV not parsed correctly
by dr_panther. 05/06/24 18:50
AUM Magazine
Latest Screens
The Bible Game
A psychological thriller game
SHADOW (2014)
DEAD TASTE
Who's Online Now
0 registered members (), 984 guests, and 5 spiders.
Key: Admin, Global Mod, Mod
Newest Members
LucasJoshua, Baklazhan, Hanky27, firatv, wandaluciaia
19053 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
Black & White Kamera #181777
02/03/08 19:16
02/03/08 19:16
Joined: Aug 2003
Posts: 127
Berlin, Germany
C
CHaP Offline OP
Member
CHaP  Offline OP
Member
C

Joined: Aug 2003
Posts: 127
Berlin, Germany
Hey,

ich versuche mich gerade bei der Kamerasteuerung. Vielleicht kann mir jemand von euch helfen.

Ich hätte gerne eine Art Kamere, wie man sie aus Black & White kennt. Ein "Cursor" bewegt sich auf dem Boden, oder einer Ebene, entlang und per Mausklick, kann man die Kamera nach ziehen bzw. bewegen.

Dieses "Nachziehen" funktioniert soweit.

Ich benutze dazu zwei Dummys. Der Eine ist mein CursorDummy (die Hand aus B&W) auf einer Ebene und der andere Dummy ist der CameraDummy, auf dem die ganze Zeit die Kamera ausgerichtet wird.
Halte ich jetzt die Maustaste gedrückt, so bleibt die Position des CursorDummys unverändert aber die Position des CameraDummys wird nun mittels Mausbewegung verändert und es hat den Anschein, als ob man die Kamera ziehen/schieben kann.

Nun, jetzt kommt die Sache wo ich merkte, dass dieser Weg nicht der richtige ist.

Denn, ich möchte die Kamera auch rotieren lassen. Und zwar soll die Rotation um den CursorDummy geschehen. Das Rotationszentrum, soll sich also immer bei der CursorDummy-Position befinden, nicht bei der CameraDummy-Position.

Als Grundlage benutze ich das Kamera Tutorial von den AU Resources:
Hier der Link: Tutorial

Kleiner Ausschnitt:
Code:

...
var_CameraDistance = cos(var_CameraTilt) * var_CameraTotalDistance;
camera.x = ent_CameraDummy.x - cos(var_CameraPan) * var_CameraDistance;
camera.y = ent_CameraDummy.y - sin(var_CameraPan) * var_CameraDistance;
camera.z = ent_CameraDummy.z + sin(var_CameraTilt) * var_CameraTotalDistance;
camera.pan = var_CameraPan;
camera.tilt = -var_CameraTilt;
camera.roll = 0;
...



Als Beispiel für die Art Kamera, die so ähnlich wie die aus B&W ist, hab ich noch ein kleines Video von "The Room" mit verlinkt:
The Room

Meine Idee war folgende:

Ich berechne die entstehende Distanz vom CursorDummy zum CameraDummy und rechne die auf die Kamera Position drauf. Somit könnte ich die Kamera die ganze Zeit auf den CursorDummy ausrichten lassen, anstatt auf den CameraDummy.
Wenn ich jetzt die Maustaste gedrückt lasse und sie bewege, rechne ich die Distanz wieder runter.

Könnte das so funktionieren?
Oder muss ich da völlig anders ran gehen?

Re: Black & White Kamera [Re: CHaP] #181778
02/04/08 16:10
02/04/08 16:10
Joined: Jan 2007
Posts: 1,619
Germany
Scorpion Offline
Serious User
Scorpion  Offline
Serious User

Joined: Jan 2007
Posts: 1,619
Germany
du brauchst keine dummy entity und so.
Als erstes setzt du die Position der Hand in der Spielwelt. Dann kannst du die cam mit hilfe von mouse_force.x/y auf den x und y Achsen verschieben (hier ist fsin/fcos mit camera.pan von Nöten)
(Bei B&W wird bei der Bewegung die Höhe nicht verändert)

PS: es ist egal, wo sich die Hand des Spielers befindet. Die Bewegung bleibt gleich

Re: Black & White Kamera [Re: Scorpion] #181779
02/05/08 03:30
02/05/08 03:30
Joined: Aug 2003
Posts: 127
Berlin, Germany
C
CHaP Offline OP
Member
CHaP  Offline OP
Member
C

Joined: Aug 2003
Posts: 127
Berlin, Germany
Ok. Klingt schon mal gut.
Den Gedanke mit dem Verschieben der X und Y Position der Kamera per direktem mouse_force hatte ich auch schon. Klappt auch prima.

Woran es immer scheitert, ist die Sache mit der Rotation. Ich weiss nicht wirklich, wie ich das bewerkstelligen soll, das sich halt das Rotationszentrum bei der Hand befindet.

Helfen mir da etwa die fsin() und fcos() Befehle? Hab mit denen noch nie gearbeitet.

Ich dachte halt, ich brauch so eine Art Third Person View. Damit ich die Kamera immer an einem Objekt ausrichten kann bzw. damit die Kamera immer einen Bezug hat, mit dem ich sie entlang dessen verschieben und drehen kann.

Re: Black & White Kamera [Re: CHaP] #181780
02/05/08 11:19
02/05/08 11:19
Joined: Jan 2007
Posts: 1,619
Germany
Scorpion Offline
Serious User
Scorpion  Offline
Serious User

Joined: Jan 2007
Posts: 1,619
Germany
so weit ich mich noch an black and white erinnern kann, wird die cam doch gedreht, ohne xyz zu verändern. sobald man sie an den rand des bildschirms hält kommt doch diese "dreh-hand".
wenn du dann klickst kannst du die maus im kreis bewegen und der..pan? verändert sich. dann musst du nur eine funktion machen die die aktuelle (bildschirm = x/y) position der hand findet und daraus dann die rotation herausfindest(in einer art elypse. Indem man die bildschirm coordinaten auf -1 bis 1 bringt jeweils von diesem wert dann den asin bzw. acos nimmt)


Den camera pan bekommst du dann, wenn du diesen wert von der position , an der du angefangen ahst abziehst (z.B. rechts/mitte wären ja 90°) und dass dann solange die rechte maustaste gedrückt ist zu dem vorherigen pan hinzuaddiertst.

Das fcos und fsin brauchst du dann ja nur noch, um die richtung der bewegung (mit mouse_force) zu bestimmen. Ich hoffe das war jetzt einigermaßen verständlich (sogar mit bild)

Re: Black & White Kamera [Re: Scorpion] #181781
02/05/08 11:59
02/05/08 11:59
Joined: Mar 2006
Posts: 2,252
Hummel Offline
Expert
Hummel  Offline
Expert

Joined: Mar 2006
Posts: 2,252
Ich habe B&W nie gespielt und weiß deshalb auch nicht ganz genau wie das Endprodukt aussehen soll, aber vieleicht kann dir folgender Code ein wenig weiter helfen:

function isometric_camera() // displays the player from an orbit-view

{

var i =0; //pan-cam
var i2=0; //tilt-cam

while (player == NULL) {wait (1);} // wait until the player is created


while (1)
{

i2+=(mouse_force.y)*12*time_step;


i2=clamp(i2,-90,90);


i+=(mouse_force.x)*40*time_step; //auskommentieren und im player-code
//"pan+=(mouse_force.x)*40*time_step;" oder
//"c_rotate(my,vector(40 * (mouse_force.x) * time_step,0,0),IGNORE_PASSABLE);"
//setzen


camera.pan = player.pan+i;

camera.tilt = player.tilt+i2;

camera.z = player.z +10 - 50 * sin(camera.tilt);

camera.x = (player.x - 50 *cos(camera.tilt)*cos(player.pan+i));

camera.y = (player.y - 50 *cos(camera.tilt)*sin(player.pan+i));


wait (1);

}

}

Das ist ein Kamera, welche sich in einem festgelegtem Abstand (50 Quants in unserem Fall) um einen Punkt (hier 10 Quants über dem player ) mit der Maus rotieren lässt. Folgst du dem Kommentar bei der i+=... Zeile, dann rotiert die player entity mit der Mausbewegung und die Kamera mit ihr-ansonsten nur die Kamera um den player.
Musst eben noch player=my; im Code der Entity einfügen an welche die Kamera gehängt werden soll.

Vieleicht kannste dem Code was für dich Nützliches entnehmen.

Re: Black & White Kamera [Re: Hummel] #181782
02/05/08 12:11
02/05/08 12:11
Joined: Jan 2007
Posts: 1,619
Germany
Scorpion Offline
Serious User
Scorpion  Offline
Serious User

Joined: Jan 2007
Posts: 1,619
Germany
@hummel es gibt keinen player in black and white^^

Re: Black & White Kamera [Re: Scorpion] #181783
02/05/08 12:59
02/05/08 12:59
Joined: Mar 2006
Posts: 2,252
Hummel Offline
Expert
Hummel  Offline
Expert

Joined: Mar 2006
Posts: 2,252
CHap schrieb das er das Rotationszentrum auf die Hand legen will-das wäre dann die "player"-entity.

Re: Black & White Kamera [Re: Hummel] #181784
02/05/08 15:11
02/05/08 15:11
Joined: Aug 2003
Posts: 127
Berlin, Germany
C
CHaP Offline OP
Member
CHaP  Offline OP
Member
C

Joined: Aug 2003
Posts: 127
Berlin, Germany
@Scorpion:
Quote:


Also in B&W konnte man, wie du schon sagtest, die Kamera drehen, indem man an den Bildschrimrand geht, klickt und die Maus bewegt.

Aber das wäre ja zu einfach.





Man kann auch noch die Kamera drehen, wenn man die mittlere Maustaste gedrückt hält und die Maus dann bewegt. Die Hand (player-entity) kann sich also überall auf der Welt befinden und definiert beim Rotieren eben dann das Rotationszentrum.

@Hummel:
Quote:


Hängt die Kamera immer 50 Quants hinter dem Player und 10 Quants über ihm?
Das würde dann dem Status meines Codes entsprechen, dass das Rotationszentrum nicht veränderbar ist.

Ich teste den Code mal und sag bescheid, obs geholfen hat





Also ich kann mich auch irren. Vielleicht dreht sich die Kamera in B&W immer um das Zentrum vom Bildschirm.
Ich installier es demnächst mal und erstelle ein Video.
Wobei aber "The Room", schon sehr gut zeigt, wie ich das mit der player-entity und dem Rotationszentrum meine.
Die Kamera ist da stehts zum Cursor ausgerichtet. Jede Bewegung, Drehung und Zoom führt immer zum Cursor bzw. der Cursor ist das Zentrum.

In B&W bewegt sich die Hand unabhängig von der Kamera. Man bewegt die Hand, die Kamera steht still.
Hab noch eben schnell ein Bild gemalt:

(Die Kreise verdeutlichen, den Rotationsweg bei der Kameradrehung)



Links seht ihr das Modell, wo sich bei jeder Handbewegung, die Kamera hinter dem player-entity (Hand) herbewegt. Die Kamera "klebt" also an der Hand dran.

Rechts steht die Kamera so lange still, bis man sie bewegen möchte. In diesem Fall bewege ich nur die Hand nach rechts oben. Dort soll dann geklickt werden und die Kamera hat jetzt ein verändertes Rotationszentrum, um das sie sich dreht.


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

Gamestudio download | chip programmers | 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