This is my preferred method. Controls are as I mentioned above.
Sync On : Sync Rate 0 : Sync
Type tCam
XPos#
YPos#
ZPos#
XAng#
YAng#
Zoom#
EndType
Global Cam As tCam
Global Smooth# = 0.1
Make Matrix 1, 500, 500, 50, 50
Position Matrix 1, -250.0, 0.0, -250.0
Cam.XPos# = 0.0
Cam.YPos# = 0.0
Cam.ZPos# = 0.0
Cam.XAng# = 45.0
Cam.YAng# = 0.01
Cam.Zoom# = 25.0
`make a dummy object as the sin/cos maths aren't working very well.
`Plus, this can be used as an axis marker. (Or hide it, as I've done)
Make Object Plain 1, 5.0, 5.0 : XRotate Object 1, 90 : Fix Object Pivot 1 : Hide Object 1
Do
`Record the X/Y mouse movements
XMouse# = ( MouseMoveX() * Smooth# )
YMouse# = ( MouseMoveY() * Smooth# )
`X/Z Translation
If MouseClick() = 1
`Move the dummy object, rotate it, and move it again.
Move Object 1, YMouse# : YRotate Object 1, WrapValue( Object Angle Y( 1 ) + 90.0 ) : Move Object 1, XMouse#
`Record the dummy objects position
Cam.XPos# = Object Position X( 1 )
Cam.ZPos# = Object Position Z( 1 )
EndIf
`Y Translation
If MouseClick() = 2
Cam.YPos# = Cam.YPos# + YMouse#
EndIf
`X/Y Rotation
If MouseClick() = 4
Cam.YAng# = Cam.YAng# + XMouse#
Cam.XAng# = Cam.XAng# + YMouse#
EndIf
`Zoom In/Out
Cam.Zoom# = Cam.Zoom# - ( MouseMoveZ() * Smooth# )
If Cam.Zoom# < 25.0 Then Cam.Zoom# = 25.0
`Position / Rotate Dummy Object
Position Object 1, Cam.XPos#, Cam.YPos#, Cam.ZPos#
YRotate Object 1, Cam.YAng#
`Position / Rotate Camera
Position Camera Cam.XPos#, Cam.YPos#, Cam.ZPos#
YRotate Camera Cam.YAng# : XRotate Camera Cam.XAng#
Move Camera 0.0 - Cam.Zoom#
Sync
Loop
My signature is NOT a moderator plaything! Stop changing it!
