Kamerasteuerung im 3D-Bereich

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

CrowSmith

ehemals "Fleisch"

Betreff: Kamerasteuerung im 3D-Bereich

BeitragSa, Nov 12, 2011 20:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo.

Bin gerade dabei, die Kamera meines aktuellen Projektes mobil zu machen.
Dabei stoße ich allerdings immer wieder auf Probleme.

Im 2D Bereich habe ich gelernt die Flugbahn eines Objektes mit Sin und Cos zu bestimmen, sodass es eben nicht nur starr in die vier Grundrichtungen bewegt werden kann.

Muss ich das gleiche Prinzip auch auf die dritte Dimension anwenden?

Möchte eine umherfliegende Kamera, die immer in DIE Richtung fliegt, in die sie schaut.
WASD = Bewegung in die vier Grundrichtungen, also S = Bewegt sich entgegengesetzt der Blickrichtung.
A und D = Bewegt sich jeweils horizontal orthogonal zur Blickrichtung.

Leertaste = Y-Achse auf
Strg = Y-Achse ab

Maus auf/ab = Blickwinkel auf/ab
Maus links/rechts = Blickwinkel links/rechts

mehr muss es erstmal nicht sein denke ich.

WASD,Leertaste und Strg sind ja auch kein Problem, aber:

1. Ich habe Probleme bei der Kameradrehung (auf/ab/links/rechts)
2. Ich weiss nicht, wie ich es bewerkstelligen soll, die Kamera in die Blickrichtung zu bewegen...

Kann mir da Jemand behilflich sein?

Danke, mfG, CrowSmith
Worklogs: TotalWar2D
Wbsites: Privat / Entwicklerstudio / Gewerbe (Folgen bald)
Smartphones: Samsung Galaxy S I9000 / Samsung Galaxy S2 I9100 / Samsung Galaxy S3 (Kommt 2012)
Notebook 1: HP Pavillion DV6700 (AMD 64 X2 TL-60 @ 2.00GHz, 4GB DDR3 1333MHz, Nvidia GeFroce 8400M GS, Win Vista Home Premium 32Bit)
Notebook 2: HP Pavillion DV6t Quad Edition (KOMMT BALD =] )
Notebook 3: Clevo X7200 (KOMMT BALD =] )
Desktop: (KOMMT BALD =] )

ZEVS

BeitragSa, Nov 12, 2011 20:12
Antworten mit Zitat
Benutzer-Profile anzeigen
MoveEntity zum Bewegen nach Blickrichtung. TurnEntity zum relativen Drehen.

ZEVS

Ana

Betreff: Re: Kamerasteuerung im 3D-Bereich

BeitragSa, Nov 12, 2011 20:17
Antworten mit Zitat
Benutzer-Profile anzeigen
CrowSmith hat Folgendes geschrieben:
Möchte eine umherfliegende Kamera, die immer in DIE Richtung fliegt, in die sie schaut


Moveentity ist der Befehl dafür.

Ansonsten muss du bei mehr als 2 Dimensionen dich fürchte ich auf die Vektorrechnung einlassen.

Dafür brauchst du Start und Richtung/Ziel.

Dann ermittelst du die Länge deines Vektors und teilst die Richtungen durch Länge, damit erhälst du die Anteile jeder Richtung und insgesamt ergeben sie 1.
Wenn du nun jeder mit der Geschwindigkeit multiplizierst dann hast du deine Bewegung.

Aber solange du relativ zur objektrichtung dich bewegst nimm einfach Move oder TurnEntity
Don't only practice your art,
but force your way into its secrets,
for it and knowledge
can raise human to divine

Johannes´

BeitragSa, Nov 12, 2011 20:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Du solltest dir angewöhnen, die Suche benutzen. "Maussteuerung" sollte da schon das Passende liefern.

Wenn du die Kamera drehst, dreht sich das Koordinatensystem der Kamera auch. Das heißt
Code: [AUSKLAPPEN]
MoveEntity kamera,0,0,1

bewegt die Kamera immer in die Richtung, in die sie schaut bzw. gedreht ist.

Ansonsten: TurnEntity, MouseXSpeed, MouseYSpeed, MoveEntity und vielleicht TranslateEntity, um eine absolute Verschiebung zu errreichen.

CrowSmith

ehemals "Fleisch"

BeitragSa, Nov 12, 2011 20:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke euch, das war der Wink mit dem Zaunpfahl Razz

Ich werd mir mal angewöhnen nicht mehr parallel zu fragen und in die Hilfe zu schauen sondern VORHER in die Hilfe zu schauen Razz Tut mir leid Jungs Razz
Worklogs: TotalWar2D
Wbsites: Privat / Entwicklerstudio / Gewerbe (Folgen bald)
Smartphones: Samsung Galaxy S I9000 / Samsung Galaxy S2 I9100 / Samsung Galaxy S3 (Kommt 2012)
Notebook 1: HP Pavillion DV6700 (AMD 64 X2 TL-60 @ 2.00GHz, 4GB DDR3 1333MHz, Nvidia GeFroce 8400M GS, Win Vista Home Premium 32Bit)
Notebook 2: HP Pavillion DV6t Quad Edition (KOMMT BALD =] )
Notebook 3: Clevo X7200 (KOMMT BALD =] )
Desktop: (KOMMT BALD =] )

CrowSmith

ehemals "Fleisch"

BeitragSa, Nov 12, 2011 22:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Neuer Post weil neues Problem...

bin frustriert... finde NICHTS im Forum was mir weiterhelfen würde...

habe dashier gefunden
Code: [AUSKLAPPEN]

If EntityPitch(camera)>80 RotateEntity camera,89,0,0
If EntityPitch(camera)<-80 RotateEntity camera,-89,0,0

aber das erzeugt neue Probleme....

Ich möchte mit der Kamera auf und ab schauen und mittels Begrenzung verhindern, dass die kamera sich "überschlägt". Mit dem oben geposteten Code (Habe ich aus dem Forum) funktioniert das zwar, aber ich bleibe ab und an hängen und komme nicht mehr vom 80er Winkel weg. Plötzlich fliegt mir dann aber die Kamera um die Ohren wenn ich die Maus etwas intensiver bewege, um wieder wegzukommen.

Außerdem habe ich ein Problem mit gleichzeitigem Drehen um die X- und um die Y-Achse... irgendwie sehe ich das "Terrain" dann am Ende immer "schräg" und komme nicht wieder in die gewünschte Lage der Kamera...

Dazu kommt noch, dass ich die Drehungen (Sowohl die horizontale als auch die vertikale) nicht allein vom mousexspeed und mouseyspeed abhängig machen will, denn wenn ich die Maus minimal zu schnell bewege rastet die Drehung direkt abnormal aus...

Ich benötige eine Erläuterung...

Die horizontale Drehung habe ich jetzt wieder rausgenommen (Grund dafür oben erklärt).
Die vertikale Drehung habe ich natürlich mit

EDIT: Sorry habe den Code nicht korrekt eingefügt :S Jetzt ist er da
Code: [AUSKLAPPEN]

TurnEntity camera,MouseYSpeed()*1,0,0

umgesetzt...

Kann mir bitte Jemand weiterhelfen?

Ich bräuchte mal einen Modellcode der mir anschaulich zeigt, wie ich das mit der Kamera angehen muss.
Ich möchte die Kamera ganz "normal" bewegen können, eben wie z.B. in einem Egoshooter oder first person RPG... Das fortbewegen der Kamera haut super hin aber eben das mit den Drehungen nicht... Fehler sind oben beschrieben...

DAS frustiret mich jetzt...
Worklogs: TotalWar2D
Wbsites: Privat / Entwicklerstudio / Gewerbe (Folgen bald)
Smartphones: Samsung Galaxy S I9000 / Samsung Galaxy S2 I9100 / Samsung Galaxy S3 (Kommt 2012)
Notebook 1: HP Pavillion DV6700 (AMD 64 X2 TL-60 @ 2.00GHz, 4GB DDR3 1333MHz, Nvidia GeFroce 8400M GS, Win Vista Home Premium 32Bit)
Notebook 2: HP Pavillion DV6t Quad Edition (KOMMT BALD =] )
Notebook 3: Clevo X7200 (KOMMT BALD =] )
Desktop: (KOMMT BALD =] )
  • Zuletzt bearbeitet von CrowSmith am So, Nov 13, 2011 14:43, insgesamt einmal bearbeitet

ZEVS

BeitragSo, Nov 13, 2011 11:38
Antworten mit Zitat
Benutzer-Profile anzeigen
edit: Bitte bis nach dem Zitat ignorieren
Sag mal, liest du dir eigentlich durch, was du da schreibst?
Zitat:
Die vertikale Drehung habe ich natürlich mit
Code: [AUSKLAPPEN]




umgesetzt...

Das Problem an deinem Beispiel-Code ist, dass du, wenn die Kamera zu weit geht, sie außerhalb des gewünschten Bereiches absetzt. Das solltest du ändern.

ZEVS
  • Zuletzt bearbeitet von ZEVS am So, Nov 13, 2011 16:22, insgesamt einmal bearbeitet

NightPhoenix

BeitragSo, Nov 13, 2011 14:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Modellbeispiel?

Ganz einfach.

Wenn du eine Art Spielerfigur hast die unter dem Einfluss von Gravitation steht...
Erstelle einen Pivot CreatePivot und nutze diesen um folgendes zu machen:
- Sprünge in die Höhe (Y-Achse)
- Drehung des Pivots (Y-Achse)

Hänge dort deine Spielfigur (falls verfügbar) und die Kamera via EntityParent an.

Jetzt dreht sich die Kamera und Spielfigur immer mit der Drehung des Pivots mit.

Das nach oben bzw. unten schauen realisierst du durch...
- Drehung der Kamera (X-Achse)



So wird nix schief und krumm und du hast gleich sinnvolle Komponenten um darauf mal ein funktionierendes Bewegungssystem mit Spielfigur aufzubauen.

Der besagte Pivot könnte dein Fuß sein, die Kamera die Augen (Also setze die Kamera etwas höher als den Pivot).
Beachte, dass du zuerst EntityParent anwenden solltest und dann die Komponenten positionierst und rotierst. Ebenso immer zuerst positionieren und dann rotieren, sonst kann es passieren dass du das Objekt in Abhängigkeit seiner Rotation bewegst. Wink


MfG.

CrowSmith

ehemals "Fleisch"

BeitragSo, Nov 13, 2011 14:47
Antworten mit Zitat
Benutzer-Profile anzeigen
@NightPhoenix: Danke Dir, das klingt vernünftig. Werde das gleich mal umsetzen.

@ZEVS: Tut mir echt leid, habe da wohl beim Einfügen des Codes was falsch gemacht :S Habe es korrigiert.
Worklogs: TotalWar2D
Wbsites: Privat / Entwicklerstudio / Gewerbe (Folgen bald)
Smartphones: Samsung Galaxy S I9000 / Samsung Galaxy S2 I9100 / Samsung Galaxy S3 (Kommt 2012)
Notebook 1: HP Pavillion DV6700 (AMD 64 X2 TL-60 @ 2.00GHz, 4GB DDR3 1333MHz, Nvidia GeFroce 8400M GS, Win Vista Home Premium 32Bit)
Notebook 2: HP Pavillion DV6t Quad Edition (KOMMT BALD =] )
Notebook 3: Clevo X7200 (KOMMT BALD =] )
Desktop: (KOMMT BALD =] )
 

bjh

BeitragSo, Nov 13, 2011 16:21
Antworten mit Zitat
Benutzer-Profile anzeigen
versuch doch einfach den yaw- oder roll-winkel zu verwenden:

if entityyaw(objekt)=180 rotateentity objekt,90,0,0

ich weiß nicht ob das richtig ist. musst selber testen.

CrowSmith

ehemals "Fleisch"

BeitragSo, Nov 13, 2011 17:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok habe es jetzt hinbekommen. Pivot erstellt, Kamera drangeklatscht, Pivot übernimmt jedliche Bewebung AUSSER eben die Auf/Auf-Drehung, die überlasse ich weiterhin der Kamera. So funktioniert es einwandfrei!

Danke Euch!

Gruß, der CrowSmith
Worklogs: TotalWar2D
Wbsites: Privat / Entwicklerstudio / Gewerbe (Folgen bald)
Smartphones: Samsung Galaxy S I9000 / Samsung Galaxy S2 I9100 / Samsung Galaxy S3 (Kommt 2012)
Notebook 1: HP Pavillion DV6700 (AMD 64 X2 TL-60 @ 2.00GHz, 4GB DDR3 1333MHz, Nvidia GeFroce 8400M GS, Win Vista Home Premium 32Bit)
Notebook 2: HP Pavillion DV6t Quad Edition (KOMMT BALD =] )
Notebook 3: Clevo X7200 (KOMMT BALD =] )
Desktop: (KOMMT BALD =] )

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group