Kamera-Elastizität in 3D

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

Megamag

Betreff: Kamera-Elastizität in 3D

BeitragDi, März 03, 2009 15:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo.
Man kann ein Raumschiff steuern, so wie in dem Beispiel XFighter.
Also in alle Richtungen mit Drehungen. Wie schaffe ich es, dass die Kamera hinterherzieht?
Eine Kamera-Elastizität, versteht ihr? Ich habe so viele Tage drüber nachgedacht, so viel Code
geschrieben, einiges funktionierte gut, aber als ich es in das Spiel bauen wollte, ging es wieder
nicht. Ich weiß nicht mehr, was ich tun soll. Ich dachte, ich schaffe es vielleicht diesmal alleine,
aber nein. Ich brauche unbedingt eure Hilfe!

Smily

BeitragDi, März 03, 2009 16:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Hoi,

Also mit 3D habe ich mich nie großartig befasst, aber allgemein bekomm ich eine "Elastische" Bewegung hin, in dem ich ständig den Abstand zwischen zwei Objekten messe, den wert durch einen bestimmten andern wert dividiere (Davon hängt dann die geschwindigkeit ab, 10 sollte ein guter ausgangspunkt sein) und das objekt dann um diesen wert vorsetze.

grüße,
Smily
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org

Megamag

BeitragDi, März 03, 2009 16:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Genau das habe ich versucht (Übrigens mit Hilfe eines Codes von xpressive von irgendwo hier).
Hier ist er:
Code: [AUSKLAPPEN]
Graphics3D 800,600,0,2 : SetBuffer BackBuffer()

sollX# = 0
sollY# = 0
sollZ# = 15

istX#   = 0
istY#   = 0
istZ#    = 20

cam = CreateCamera()
soll=CreateCube()
EntityColor soll,255,0,0
EntityAlpha soll,.5
ist=CreateSphere()

While Not KeyHit(1)

Cls

   ; UNSICHTBAREN CURSOR BEWEGEN
   If KeyDown(208) sollY = sollY - .2
   If KeyDown(200) sollY = sollY + .2
   If KeyDown(203) sollX = sollX - .2
   If KeyDown(205) sollX = sollX + .2
   If KeyDown(30)  sollz = sollz - .2
   If KeyDown(44)  sollz = sollz + .2




   ; SCHIFFPOSITION LANGSAM AUF CURSORPOSITION BEWEGEN
   istX = istX + (sollX-istX) / 16 ; <- JE GRÖSSER, DESTO TRÄGER
   istY = istY + (sollY-istY) / 16
   istZ = istZ + (sollZ-istZ) / 16

PositionEntity soll,sollX,sollY,sollZ
PositionEntity ist,istX,istY,istZ
 
PositionEntity cam,EntityX(ist),EntityY(ist),EntityZ(ist)-15


UpdateWorld
RenderWorld
Flip
Wend
End


Das läuft wunderbar, aber wenn ich das in mein Spiel einsetzte, geht nur noch die Z-Achse?

Smily

BeitragDi, März 03, 2009 16:10
Antworten mit Zitat
Benutzer-Profile anzeigen
vlt setzt du x und y noch irgendwo anders im code?
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org

Chrise

BeitragDi, März 03, 2009 16:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab mal schnell nen kleinen Code geschrieben. Vll hilft dir der ja was Wink

Code: [AUSKLAPPEN]
Graphics3D 800,600,0,2
SetBuffer BackBuffer()
timer=CreateTimer(25)

Global camera_damping#=0.1

camera=CreateCamera()
light=CreateLight()
RotateEntity light,90,0,0

fighter=CreateCube()
camera_pivot=CreatePivot(fighter)
PositionEntity camera_pivot,0,0,-10

While Not KeyHit(1)
   
   cam_x#=EntityX(camera)
   cam_y#=EntityY(camera)
   cam_z#=EntityZ(camera)
   fighter_x#=EntityX(fighter)
   fighter_y#=EntityY(fighter)
   fighter_z#=EntityZ(fighter)
   piv_x#=EntityX(camera_pivot,1)
   piv_y#=EntityY(camera_pivot,1)
   piv_z#=EntityZ(camera_pivot,1)
   move_x#=(piv_x#-cam_x#)*camera_damping#
   move_y#=(piv_y#-cam_y#)*camera_damping#
   move_z#=(piv_z#-cam_z#)*camera_damping#
   
   mxs=MouseXSpeed()
   mys=MouseYSpeed()
   
   TurnEntity fighter,mys/5,-mxs/5,0
   RotateEntity fighter,EntityPitch(fighter),EntityYaw(fighter),0
   
   TranslateEntity camera,move_x#,move_y#,move_z#
   AlignToVector camera,fighter_x#-cam_x#,fighter_y#-cam_y#,fighter_z#-cam_z#,3,camera_damping#
   RotateEntity camera,EntityPitch(camera),EntityYaw(camera),0
   
   RenderWorld
   WaitTimer timer
   Flip 0
Wend
End

Blackside

BeitragDi, März 03, 2009 16:19
Antworten mit Zitat
Benutzer-Profile anzeigen
vll hilft dir
Code: [AUSKLAPPEN]
Function Curve#(current#,destination#,Curve)
   current#=current#+((destination#-current#)/Curve)
   Return current#
End Function

ja auch etwas Wink
Hier sollte eigentlich eine Signatur stehen!

Megamag

BeitragDi, März 03, 2009 17:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Chrise, das ist zwar nicht was ich wollte, aber die
Kameraführung ist so geil, dass ich die jetzt einfach mal nehme.
Fettes danke (an alle) und fetten Credit für Chrise Very Happy

Chrise

BeitragDi, März 03, 2009 18:18
Antworten mit Zitat
Benutzer-Profile anzeigen
lol, okay dann bin ich ja beruhigt ^^
Hatte nur froher mal das selbe Problem.
(aja übrigens können Nebenwirkungen auftreten, wenn du exakt senkrecht nach oben oder unten schaust. Musst du eben mal schaun ob du da ne Lösung findest Wink)
Danke übrigens, muss keiner oder wenn du unbedingt willst, kein fetter sein ^^

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group