Kameraführung[3D]

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Dottakopf

Betreff: Kameraführung[3D]

BeitragSa, Feb 03, 2007 21:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Blitzer !

Hmm Kameraführung... Ihr denk bestimmt, dass ich nicht die suche benutz habe Cool . Doch hab ich schon --> spuckt auch was aus, nur leider nicht das was ich möchte Crying or Very sad.

Ich hab vor kurzen mal wieder ne runde mit meinem Game Cube gedreht und da ist mir ne gut geeignete Kameraführung für mein "Ameisen game" aufgefallen. In dieser ist die Kamera immer auf den Spieler ausgerichtet wobei drehungen des Spielers in erster Linie nicht beachtet werden. Also das heißt wenn der Spieler z.B. nach links läuft, bleibt die cam drauf und "schaut ihm von der Seite beim laufen an". Wobei die distance gleichbleibt. Sobalt ich die R-Taste drücke springt die cam wieder hinter den Player. Und genau sowas wollte ich auch, da sie zum einen übersichtlich ist und zum andern einfach schick ausschaut.

Hab mich dan auch gleich an mein Projekt geschmissen und and der cam einstellung rungetüftelt:

ich dachte mir ich erstelle 2 pivots, einen für den Player, einen für die cam. Dann Parents verteilen auf Player und Cam legen, damit diese bei Bewegung drauf bleiben. Abschliesend noch zwischen dem camPivot und playerPivot ein Parent legen damit diese gleichweit entfernt bleiben / sich verfolgen. (ja geil erklärt ich weis...). Hmm das mein Gedankengang. Passiert ist dann aber nicht viel... Mad.

Warum Passiert das? mit entityparent bleiben doch zwei objekte immer auf gleicher distance. Warum klappt das zwischen zwei Parents nicht.(P1,P2)?
Ist der Gedankengang überhaupt richtig ? bzw. Sinnvoll.

Bestimmt mal wieder n dödel fehler ^^ Damit Ihr euch des aber besser vorstellen könnt, was ich da zam gecoded hab sende ich meinen lösungsversuch/code mit.

Code: [AUSKLAPPEN]


Global P1 = CreatePivot(player)
Global P2 = CreatePivot(camera)

;schleife
   ;function
;---

Function update_camera()

  EntityParent(P1),player
  EntityParent(P2),camera
  EntityParent(P1),P2

End Function




Wäre auch nett wenn Ihr mir noch erklären könntet wie des mit dem "hinter den Spieler springen" funktioniert.
Also ich dank euch schoneinmal für eure Hilfe !!

mfg Dottakopf
Rechtschreibfehler gelten der allgemeinen Belustigung!
  • Zuletzt bearbeitet von Dottakopf am Sa, Feb 03, 2007 22:34, insgesamt 2-mal bearbeitet

Artemis

BeitragSa, Feb 03, 2007 22:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Das mit dem "hinter den Spieler springen" sollte so funktionieren:

KameraHöhe = SpielerHöhe + IrgendeinWert
KameraXPosition = - Cos(SpielerRotation) * Entfernung
KameraYPosition = - Sin(SpielerRotation) * Entfernung

Kamera auf Spieler zeigen lassen

Dottakopf

BeitragSa, Feb 03, 2007 22:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Ahh ok danke !

Aber (SpielerRotation) ? Wie frage ich das ab, oder was ist das genau ? Embarassed

mfg dottakopf
Rechtschreibfehler gelten der allgemeinen Belustigung!

Artemis

BeitragSa, Feb 03, 2007 23:13
Antworten mit Zitat
Benutzer-Profile anzeigen
SpielerRotation ist ein Winkel (0°-355°). Irgendwohin muss dein Spiele auch zeigen (gehen, usw.) und dafür nimmt man normalerweise einen Winkel.

Wie du einen Winkel eines Objektes abfragst, musst du mich nicht fragen, habe selber nie 3D programmiert.

Dottakopf

BeitragMi, Feb 07, 2007 21:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für deine Hilfe !

Jedoch ist mein Hauptproblem noch nicht gelöst worden Crying or Very sad

Kurz nochmal was ich wollte :
Es geht um eine Spezielle Kamaführung in der die Kamera immer auf den Spieler ausgerichtet sein soll und drehungen des Spielers in erster Linie nicht beachtet werden sollen. Also, sodass die Kamera nicht immer hinter dem Spieler ist, sondern diesen nur "betrachtet" wird. Dieser Effekt, mit dem "Dreh-ignorier-dingens", kommt mit Pointentity a,v,0 ganz gut raus. Doch die Entfernung soll gleichbleiben. Das hab ich mit Entityparent versucht zu lösen doch klappen tuts nicht. Mad

Ich hab kurz mal n klönes Progi gecoded wo man das gut sehen kann. (wasd Steuerung)
Code: [AUSKLAPPEN]

Graphics3D 800,600
SetBuffer BackBuffer()

;licht
Global light = CreateLight()
       RotateEntity light,0,0,90
;spieler
Global player = CreateCube()
       PositionEntity player,0,1,0
       EntityColor player,255,0,0
;cam
Global camera = CreateCamera()
       PositionEntity camera,0,3,-5
;terrain
Global terr = CreateTerrain(256)
       EntityColor terr,0,80,0
       PositionEntity terr,-30,0,-20



;hauptschleife-----------------------
While Not KeyDown(1)

movehero()
update_camera()

UpdateWorld
RenderWorld
Flip
Wend
End
;-----------------------------------

Function movehero()

  If KeyDown(17) Then MoveEntity player,0,0, 1
  If KeyDown(31) Then MoveEntity player,0,0,-1
  If KeyDown(30) Then TurnEntity player,0, 2.5,0
  If KeyDown(32) Then TurnEntity player,0,-2.5,0

End Function
;------------------------------------

Function  update_camera()

 PointEntity camera,player,0
 MoveEntity camera,0,0,EntityDistance(camera,player)-10

End Function

;------------------------------------


mfg Dottakopf
Rechtschreibfehler gelten der allgemeinen Belustigung!
  • Zuletzt bearbeitet von Dottakopf am Do, Feb 08, 2007 22:20, insgesamt 2-mal bearbeitet

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMi, Feb 07, 2007 21:07
Antworten mit Zitat
Benutzer-Profile anzeigen
MoveEntity camera,0,0,EntityDistance(camera,player)-10

Dottakopf

Betreff: Hmm fast ^^

BeitragMi, Feb 07, 2007 21:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke !

Leider ist das nicht ganz das was ich meinte auch wen es dem sehr nahe kam. Er bleibt zwar auf gleicher Entfernung, jedoch werden die Drehungen des Spielers während der Vorwärtsbewegung nicht ignoriert. Er geht wieder hinter der Figur. Ich möchte aber das auch während der Bewegung die camera nur "ausrichtet" und "verfolgt", bei gleicher Distance.
Aber trotzdem danke.

mfg Dottakopf
Rechtschreibfehler gelten der allgemeinen Belustigung!

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMi, Feb 07, 2007 21:33
Antworten mit Zitat
Benutzer-Profile anzeigen
PositionEntity camera,EntityX(player),EntityY(player)+4,EntityZ(player)-10

Dottakopf

BeitragDo, Feb 08, 2007 18:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke !

hab leider etz keine Zeit des zu testen... Ich hetz von einem Termin zum anderen. Sollte ich noch Fragen haben melde ich mich nochmal (So vom code her, schauts ganz gut aus)

~Edit~ Jo danke nochmal, genau das meinte ich Very Happy

mfg Dottakopf
Rechtschreibfehler gelten der allgemeinen Belustigung!

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group