3rd-Person Kamera mit TFormPoint

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

Hops

Betreff: 3rd-Person Kamera mit TFormPoint

BeitragDo, Aug 14, 2008 21:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Guten Abend allerseits..
Da mich die 3rd-Person Ansicht schon länger gereizt hat, hab ich mich mal hier im Forum umgeschaut und bin auf dieses Verfahren gestoßen:
3rd-Person-Beispiel
Sieht ja schön einfach aus und klappt auch wunderbar.. bis ich versucht habe, eine einfache Sprung-Funktion einzubauen. Ich hab mir heute mal alles was ich zum Thema TForm gefunden habe angeschaut aber in allen Beispielen die ich gelesen habe wurde genau immer nur die Übertragung von Lokalen in Globale Koordinaten (o. andersherum) erklärt, nicht aber zwischen zwei (anscheinend) sogenannten Objekt Lokalen Koordinaten, wie sie in dem Beispiel oben verwendet wird.
Um mein Problem zu beheben müsste ich mich besser mit der Materie auskennen und hoffe daher auf eure Hilfe! Das Problem ist folgendes:

Ich habe diese Funktion vom Beispiel übernommen und angepasst:

Code: [AUSKLAPPEN]

Function camera_ausrichten()
   PointEntity camera, cam_target   
   TFormPoint 0,4,-8, cam_target, camera
   MoveEntity camera, TFormedX()/30,TFormedY()/30,TFormedZ()/30
End Function



Klappt soweit wunderbar, wiegesagt bis ich zum Springen gekommen bin..
Hier der (lauffähige) Code, in dem alles das Problem betreffende drin ist:
Pfeiltasten bewegen, Leertaste springen, dann sieht man das Problem

Code: [AUSKLAPPEN]

;---Voreinstellungen---
Const W = 1024
Const H = 768

Graphics3D W,H
SetBuffer BackBuffer()
;---Voreinstellungen---




;---Kamera---
Global camera = CreateCamera()
;---Kamera---




;---Spieler---
Global spieler = CreatePivot() ; Pivot, der den Spieler darstellt
MoveEntity spieler, 0,10,0
EntityRadius spieler, 1
EntityType spieler, 1

Global cam_target = CreatePivot(spieler) ; Pivot, der etwas erhöt wird und als Ziel, auf welches die Kamera zeigt, dient
MoveEntity cam_target, 0,3,0
sphere = CreateSphere(8, cam_target) ; Kugel, die die Position des Kamera-Ziel-Pivots anzeigt
ScaleEntity sphere, 0.1,0.1,0.1

Global spieler_mesh = CreateCube(spieler) ; Würfel, der den Spieler sichtbar macht
;---Spieler---





;---Umgebung---
Global ground = CreatePlane()
EntityColor ground, 90,90,120
EntityType ground, 2
;---Umgebung---




;---Variablen---
Collisions 1,2,2,2

Global speed# = 0.15   ; Bewegungsgeschwindigkeit
Global sprung         ; Sprung=1 bedeutet Spieler im Sprung
Global sprungkraft#      ; "Auftrieb" beim Springen
Global gravity# = 0.5   ; Schwerkraft

;---Variablen---





;+-+-+-+-+-+-+-+ Hauptschleife +-+-+-+-+-+-+-+
Repeat
   
   steuerung()
   camera_steuerung()
   
   
   Cls
   UpdateWorld
   RenderWorld
   Flip
   
Until KeyHit(1)
End
;+-+-+-+-+-+-+-+ Hauptschleife +-+-+-+-+-+-+-+






;############################### FUNKTIONEN ###############################


;---Spieler-Steuerung---

Function steuerung()
   
   If KeyDown(200) Then
      MoveEntity spieler, 0,0,speed
   EndIf
   If KeyDown(208) Then
      MoveEntity spieler, 0,0,-speed/2
   EndIf
   If KeyDown(203) Then
      TurnEntity spieler, 0,2,0
   EndIf
   If KeyDown(205) Then
      TurnEntity spieler, 0,-2,0
   EndIf

   
   ;---Springen---
   If KeyHit(57) And sprung = 0 Then
      sprung = 1
      sprungkraft = 1
   EndIf
      
   If sprung = 1 Then
      sprungkraft = sprungkraft - 0.01
   EndIf
   ;---Springen---
   
   
   TranslateEntity spieler, 0,-gravity +sprungkraft, 0   ;Simulieren der Schwerkraft und wenn Sprungkraft vorhanden -> "Springen"
   
   
   
End Function

;---Spieler-Steuerung---






;---Steuerung-der-3rd-Person-Kamera---
; Macht irgendwie bei/nach dem Springen Probleme:

Function camera_steuerung()
   
   PointEntity camera, cam_target   
   TFormPoint 0,4,-8, cam_target, camera
   MoveEntity camera, TFormedX()/30,TFormedY()/30,TFormedZ()/30
   
End Function

;---Steuerung-der-3rd-Person-Kamera---



Ich hoffe das Problem lässt sich beheben, da ich ungern auf die TForm methode verzichten würde weil die "normale" Kamera-Führung mit z.b. X-Differenz*0.5 o.ä. nicht so schön sanft schwingt. Eine neue, ähnlich sanfte Methode wäre natürlich auch jederzeit willkommen!!

Mfg

Mr.Keks

BeitragFr, Aug 15, 2008 15:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Heyho Hops!
(passender Name beim Thema)

Dir fehlt schlicht folgende Zeile in Steuerung():
Code: [AUSKLAPPEN]
   If sprungkraft <= 0 Then sprung = 0


Das liegt am Kollisionssystem von Blitz. Die Einheit wird zunächst bewegt und erst bei UpdateWorld() zurückgesetzt, falls sie kollidiert. Da sprungkraft# bei dir immer negativer wird, erfasst die Kamerasteuerung deine Einheit als immer tiefer im Boden und bewegt sich entsprechend in den Boden. Das hat allerdings nichts mit TFormPoint zu tun. Dieses hast du schon richtig verwendet.
MrKeks.net
 

Hops

BeitragFr, Aug 15, 2008 23:10
Antworten mit Zitat
Benutzer-Profile anzeigen
wow, dankeschön!
das wars, ja.. das war der startschuss.. Very Happy
mfg

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group