Versuche Kamera like GTA oder WoW

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

DJ_Mic

Betreff: Versuche Kamera like GTA oder WoW

BeitragFr, Jan 15, 2010 22:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

ich probiere eine Kamera zu erstellen die so ist wie bei GTA.

Beispiel:
http://www.youtube.com/watch?v...re=related

Und ein Beispiel von World of Warcraft:
http://www.youtube.com/watch?v=IkXRVvrQU0c

Ich habe hier gesucht, aber nichts finden können, was mir helfen könnte. Ich würde mich riesig freuen wenn jemand unterstützung bieten würden.

Mfg
Dennis

Megamag

BeitragFr, Jan 15, 2010 23:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe mir das Video mal angesehen und verstehe trotzdem nicht so ganz, was du willst. Vielleicht könntest du ein wenig genauer beschreiben. Wenn es dir um eine Maussteuerung geht, wo die Kamera so um den Spieler gedreht wird:
https://www.blitzforum.de/foru...hlight=gta
Der Thread hat mir damals auch sehr weitergeholfen.

skey-z

BeitragFr, Jan 15, 2010 23:43
Antworten mit Zitat
Benutzer-Profile anzeigen
am einfachsten ist es, dass du einen Pivot erstellt und den Spieler und die Camera Als Child hinzufügst

Code: [AUSKLAPPEN]

piv = createpivot()

cam = createcamera(piv)
   poisionentity cam, 0, 0, -10


player = loadmesh(player.3ds,  piv)


nun kannst du den Spieler drehen und wenden wie du willst, und den Pivot in der Welt bewegen, damit bleibt die Kamera ber immer hinter dem Pivot
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter
 

DJ_Mic

BeitragSa, Jan 16, 2010 20:29
Antworten mit Zitat
Benutzer-Profile anzeigen
So,

ich habe mal weiter gesucht und bin auf folgendes gestoßen:
https://www.blitzforum.de/foru...t=maus+cam

Jedoch, bekomme ich folgendes nicht hin.
Meine Kamera bewegt sich nicht mit. Sie springt glatt auf den Ursprung zurück. Also es ist unmöglich die Kamera um die person zu drehen.
Hier mein Code:

BlitzBasic: [AUSKLAPPEN]
Function Kamera(cam,mesh,x#,y#,z#,angle#)
winkel=winkel-MouseXSpeed()/2
winkel2=winkel2+MouseYSpeed()/1.8
xc# = XXX * Cos( winkel ) * Cos( winkel2 )
yc# = XXX * Sin( winkel2 )
zc# = XXX * Sin( winkel ) * Cos( winkel2 )
PositionEntity cam,EntityX(mesh)+xc,EntityY(mesh)+yc,EntityZ(mesh)+zc

If c#>20 Then c#=20

If EntityY(cam)<EntityY(mesh) Then ;EntityY(cam)<EntityY(player)-1 Then ;PositionEntity cam,EntityX(cam),EntityY(player),EntityZ(cam)
XXX=c#
EndIf

If EntityDistance(cam,mesh)<19.5 Then
XXX=c#
EndIf


PointEntity cam,mesh

MoveMouse 512,384

If Not EntityPitch(cam)>-40 Then
If Not EntityPitch(cam)<90 Then
PositionEntity cam,EntityX(mesh),EntityY(cam),EntityZ(mesh)
EndIf
EndIf

; RotateEntity cam,cx,cy,0
; RotateEntity mesh,EntityPitch(mesh),cy,0
; MoveMouse 400,300

; PointEntity Camera, mesh
; TFormPoint 0,4,-8, mesh, Camera
; MoveEntity Camera, TFormedX()/30,TFormedY()/30,TFormedZ()/30

End Function


Kann mir einer erklären, warum das passiert?

Tankbuster

BeitragSa, Jan 16, 2010 21:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist nicht so eine "Chase Cam" in der Castle-Demo dabei?
Musst mal in deinem Samples Ordner gucken und den Code verstehen. Wink
Twitter
Download Jewel Snake!
Windows|Android

Xeres

Moderator

BeitragSa, Jan 16, 2010 22:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Sind die Winkel Global? Ansonsten sind sie 0 wenn die Maus nicht zufällig bewegt wird. (Oder meinst du den Koordinatenursprung 0,0,0?)
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

DJ_Mic

BeitragSo, Jan 17, 2010 0:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich meine, dass die Kamera wieder zurückspringt. Sie bewegt sich zwar, aber wenn ich die Bewegung zb. zur X-Achse abbreche, springt die Kamera wieder zurück.

Also ob sie da festgebunden wäre.....

Xeres

Moderator

BeitragSo, Jan 17, 2010 0:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich könnte jetzt jeden Satz zitieren und "Wo?" oder "Wohin?" Fragen. Wenn du ein selbst laufendes Beispiel hast, wäre dir aber vielleicht schneller geholfen, als langwierig alles zu erklären.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

DJ_Mic

BeitragSo, Jan 17, 2010 0:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Jo hast recht, habe es mal hochgeladen:


http://americans-dream.de/game.zip

Xeres

Moderator

BeitragSo, Jan 17, 2010 0:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Ohne Code läuft da trotzdem nichts...
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

DJ_Mic

BeitragSo, Jan 17, 2010 0:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, bitteschön.

Kamera erstellen:
BlitzBasic: [AUSKLAPPEN]
; Create Camera
Camera=CreateCamera()
CameraRange Camera,0.1,1000
CameraFogRange Camera,0.1,1000
CameraFogMode Camera,True
CameraClsColor Camera,10,100,255
CameraFogColor Camera,150,200,255


Const C_CAM=1
Const C_CC=2

Collisions C_CAM,C_CC,2,3


Die Funktion:
BlitzBasic: [AUSKLAPPEN]
Function Kamera(cam,mesh)

winkel=winkel-MouseXSpeed()/2
winkel2=winkel2+MouseYSpeed()/1.8
xc# = XXX * Cos( winkel ) * Cos( winkel2 )
yc# = XXX * Sin( winkel2 )
zc# = XXX * Sin( winkel ) * Cos( winkel2 )
PositionEntity cam,EntityX(mesh)+xc,EntityY(mesh)+yc,EntityZ(mesh)+zc

If c#>20 Then c#=20

If EntityY(cam)<EntityY(mesh) Then ;EntityY(cam)<EntityY(player)-1 Then ;PositionEntity cam,EntityX(cam),EntityY(player),EntityZ(cam)
XXX=c#
EndIf

If EntityDistance(cam,mesh)<19.5 Then
XXX=c#
EndIf


PointEntity cam,mesh

MoveMouse ScreenWidth/2,ScreenHeight/2

If Not EntityPitch(cam)>-40 Then
If Not EntityPitch(cam)<90 Then
PositionEntity cam,EntityX(mesh),EntityY(cam),EntityZ(mesh)
EndIf
EndIf

End Function


Anwenden:
BlitzBasic: [AUSKLAPPEN]
Kamera(Camera,RagDollMesh(1))

mpmxyz

BeitragSo, Jan 17, 2010 1:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Dein Problem ist, dass die Maus wieder zurück bewegt wird.
Das ist zwar an sich richtig, aber diese Bewegung wird von [MouseXSpeed] und [MouseYSpeed] erfasst.
->Die Kamera dreht sich auch wieder zurück.
Nutze stattdessen den Abstand vom Mittelpunkt des Bildschirmes zum Drehen der Kamera und bewege danach die Maus in die Mitte.
mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer
 

DJ_Mic

BeitragSo, Jan 17, 2010 18:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Versteh ich nicht ganz, kannst du mir das näher erleutern?

mpmxyz

BeitragSo, Jan 17, 2010 19:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich werde es mal anhand eines Beispieles erklären:
Die bewegst die Maus nach rechts.
-> MouseXSpeed()>0
Eine weitere Abfrage von MouseXSpeed würde jetzt 0 ergeben.
Dann bewegst du die Maus zurück. (ncah links)
Jetzt wäre die Abfrage von MouseXSpeed negativ und im Betrag genau so groß wie der oben ermittelte Wert sein.
Jetzt warten wir aber bis zum nächsten Frame und fangen wieder bei der MouseXSpeed-Abfrage an.
Diese ergibt jetzt 0, da die Beweugung von der Mitte aus von der vorherigen "Rückbewegung" zur Mitte hin aufgehoben wurde. (Du hast jetzt mal die Maus genau so schnell wie vorher bewegt.)
Daher wird sich die Kamera nur ein kleines Bisschen von ihrem Ursprungspunkt wegbewegen und, wenn die Maus stillsteht, sich wieder zurück bewegen.
(MouseXSpeed beachtet die Aktion mit MoveMouse nicht.)

Wenn du statt "MouseXSpeed()" "MouseX()-Rücksetzposition" nutzt, hast du das, was du brauchst:
Die Größe und Richtung der Bewegung der Maus seit dem letzten Zurücksetzen.

mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer
 

DJ_Mic

BeitragSo, Jan 17, 2010 20:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich verstehe nun warum er zurück geht zu seiner Position. Aber ich verstehe nicht, wie ich das verhindern kann....

mpmxyz

BeitragSo, Jan 17, 2010 20:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Du benutzt den Abstand, um den sich die Maus nach dem Zurücksetzen vom Mittelpunkt wegbewegt hat, oder du rufst MouseXSpeed und MouseYSpeed direkt nach dem Zurücksetzen ein zweites Mal auf.
Das verhindert, dass die Rückbewegung beim anderen Aufruf berücksichtigt wird.
mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer
  • Zuletzt bearbeitet von mpmxyz am Mi, Jan 20, 2010 20:40, insgesamt einmal bearbeitet
 

DJ_Mic

BeitragMi, Jan 20, 2010 20:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja so habe ich das auch. Kann mir sonst jemand auch helfen?

mpmxyz

BeitragMi, Jan 20, 2010 20:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Du hast also den Code wirklich nach allen Vorschlägen geändert?
  • die Winkel global machen
  • etwas gegen das "Zurückschleudern" bei MouseXSpeed() machen

Falls trotzdem der Fehler drin bleibt, wäre es nicht schlecht, wenn du den aktuellen Code zeigen würdest.
mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer
  • Zuletzt bearbeitet von mpmxyz am Mi, Jan 20, 2010 20:55, insgesamt einmal bearbeitet

Chrise

BeitragMi, Jan 20, 2010 20:53
Antworten mit Zitat
Benutzer-Profile anzeigen
weiß nicht, ob ich mich noch einigermaßen richtig daran erinnere, wie die Kamera in GTA war.
Aber sowas ähnliches gabs schonmal als Thema:
https://www.blitzforum.de/foru...ght=camera
Llama 1 Llama 2 Llama 3
Vielen Dank an Pummelie, der mir auf seinem Server einen Platz für LlamaNet bietet.

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group