Camera Rotations Problem

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

Bob

Betreff: Camera Rotations Problem

BeitragFr, Mai 27, 2005 11:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Leute,

ich seh den Wald vor lauter Bäumen mal wieder nicht.
Folgendes Prob.
Für einen Editor möchte ich eine Rotations Funktion schreiben die immer die Camera, abhängig von den Mauskoordinaten, um ein Objekt rotieren lässt.
Man kann bzw soll den vollen Screen nutzen um alle Seiten des Objekts betrachen zu können.

Nachfolgender abgespekter Code macht fast genau was ich will.


BlitzBasic: [AUSKLAPPEN]

Const ScreenX = 800
Const ScreenY = 600
Const hScreenX# = ScreenX /2
Const hScreenY# = ScreenY /2
Const xStep# = 180.0 / hScreenX
Const yStep# = 180.0 / hScreenY

Graphics3D ScreenX,ScreenY,16,2
SetBuffer BackBuffer()

piv = CreatePivot()
cam=CreateCamera(piv)
PositionEntity cam,0,0,-5

box = CreateCube()
WireFrame 1

While Not KeyDown( 1 )
If MouseDown(2) Then ; RECHTE Maustaste
mx# = MouseX() - hScreenX
my# = MouseY() - hScreenY
rx# = mx * xStep
ry# = my * yStep
RotateEntity Piv, ry# ,-rx# ,0,1
EndIf
RenderWorld
Text 0,0, rx + \" \" +ry
Flip
Wend
End


Mir geht es nun darum das wenn ich den Mausklick auslöse, die Camera sich nicht ausrichtet sondern die aktuelle Pivot Position als Ausgangspunkt dient. Die Camera darf alo keinen "Sprung" machen Ich hoffe ihr versteht was ich meine.
Irgendeine Idee?
 

Klaas

BeitragFr, Mai 27, 2005 11:25
Antworten mit Zitat
Benutzer-Profile anzeigen
ich habe das immer etwas naderst gemacht .. rfunktioniert aber auch

Code: [AUSKLAPPEN]


Const ScreenX = 800
Const ScreenY = 600
Const hScreenX# = ScreenX /2
Const hScreenY# = ScreenY /2
Const xStep#  = 180.0 / hScreenX               
Const yStep#  = 180.0 / hScreenY               

Graphics3D ScreenX,ScreenY,16,2
SetBuffer BackBuffer()

Global ML_cam_pivot=CreatePivot()
Global ML_cam_pivot2=CreatePivot(ML_cam_pivot)
Global ML_camera=CreateCamera(ML_cam_pivot2)

PositionEntity ML_camera,0,0,-5

box = CreateCube()
WireFrame 1

While Not KeyDown( 1 )
        If MouseDown(2) Then ; RECHTE Maustaste
         mouselook()
      Else
         MouseXSpeed()
         MouseYSpeed()
        EndIf
        RenderWorld
        Text 0,0, rx + " " +ry
        Flip
Wend
End


Function mouselook()
   x_speed#=MouseXSpeed()
   y_speed#=MouseYSpeed()
   z_speed#=MouseZSpeed()

;   MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
      
   TurnEntity ML_cam_pivot,0,-x_speed,0   ;turn player left/right
   TurnEntity ML_cam_pivot2,y_speed,0,0   ;tilt camera
End Function

Bob

BeitragFr, Mai 27, 2005 11:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Klaas,

sehr interessant.
Das geht schon in die Richtung in die ich auch will.
Allerdings lässt sich die Camere durch den Einsatz von MouseSpeed "Überdrehen" was ich eigentlich vermeiden wollte da ich es sehr präzise brauche.
Weitehin ist noch zu beachten das die Yaw rotation durch die Pitch Rotation beeinflusst wird.
Sprich. Wenn die Cam auf dem Kopf steht rotiert die Y-Achse in Gegenrichtung zur Maus bei horizontaler Bewegung. Das ist für die User die den Editor später verwenden sollen verwirrend.
Ich experementier aber mal damit. Danke.
  • Zuletzt bearbeitet von Bob am Fr, Mai 27, 2005 11:50, insgesamt einmal bearbeitet

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group