These are two attempts at a very simple third person view. Both have problems I don't understand. The first uses standard Euler rotation:
` by the SITHSPAWN
` ----------------
AUTOCAM OFF
HIDE MOUSE
POSITION CAMERA 0,0,0
SYNC ON
INK RGB(255,255,255),1
MAKE OBJECT CUBE 2,2
COLOR OBJECT 2,RGB(0,0,0)
POSITION OBJECT 2,0,0,0
MAKE OBJECT CUBE 3,20
COLOR OBJECT 3,RGB(0,255,0)
POSITION OBJECT 3,0,30,0
MAKE OBJECT CUBE 4,30
COLOR OBJECT 4,RGB(0,0,255)
POSITION OBJECT 4,0,0,50
MAKE OBJECT CUBE 5,45
COLOR OBJECT 5,RGB(255,0,0)
POSITION OBJECT 5,25,0,0
COLOR BACKDROP RGB(155,155,155)
ROTATE OBJECT 2,0,0,0
DO
IF KEYSTATE(17)=1 THEN MOVE OBJECT 2,5
IF KEYSTATE(31)=1 THEN MOVE OBJECT 2,-5
IF KEYSTATE(30)=1
YROTATE OBJECT 2,WRAPVALUE(MY#-90)
MOVE OBJECT 2,5
YROTATE OBJECT 2,WRAPVALUE(MY#+90)
ENDIF
IF KEYSTATE(32)=1
YROTATE OBJECT 2,WRAPVALUE(MY#+90)
MOVE OBJECT 2,5
YROTATE OBJECT 2,WRAPVALUE(MY#-90)
ENDIF
IF KEYSTATE(16)=1 THEN MZ#=WRAPVALUE(MZ#-5)
IF KEYSTATE(18)=1 THEN MZ#=WRAPVALUE(MZ#+5)
MX#=WRAPVALUE(MX#+MOUSEMOVEY())
MY#=WRAPVALUE(MY#+MOUSEMOVEX())
ROTATE OBJECT 2,MX#,MY#,MZ#
ROTATE CAMERA MX#,MY#,MZ#
POSITION CAMERA OBJECT POSITION X(2),OBJECT POSITION Y(2),OBJECT POSITION Z(2)
MOVE CAMERA -10
SET CURSOR 0,0
PRINT OBJECT ANGLE X(2)," ",OBJECT ANGLE Y(2)," ",OBJECT ANGLE Z(2)
PRINT CAMERA ANGLE X()," ",CAMERA ANGLE Y()," ",CAMERA ANGLE Z()
SYNC
LOOP
The big problem with that one is that the cube doesn't face the same direction as the camera when you move the mouse.
The second one is the same thing only with Free Flight Rotation. It looks like it works fine at first glance but when you move the mouse around for a while you will notice that it starts to move around the z-axis.
` by the SITHSPAWN
` ----------------
AUTOCAM OFF
HIDE MOUSE
POSITION CAMERA 0,0,0
SYNC ON
INK RGB(255,255,255),1
DRAW TO FRONT
REMSTART
MAKE OBJECT TRIANGLE 1,0,0,0,0,0,0,0,0,0
POSITION OBJECT 1,0,0,0
HIDE OBJECT 1
REMEND
MAKE OBJECT CUBE 2,2
COLOR OBJECT 2,RGB(0,0,0)
POSITION OBJECT 2,0,0,0
MAKE OBJECT CUBE 3,20
COLOR OBJECT 3,RGB(0,255,0)
POSITION OBJECT 3,0,30,0
MAKE OBJECT CUBE 4,30
COLOR OBJECT 4,RGB(0,0,255)
POSITION OBJECT 4,0,0,50
MAKE OBJECT CUBE 5,45
COLOR OBJECT 5,RGB(255,0,0)
POSITION OBJECT 5,25,0,0
COLOR BACKDROP RGB(155,155,155)
ROTATE OBJECT 2,0,0,0
DO
IF KEYSTATE(17)=1 THEN MOVE OBJECT 2,5
IF KEYSTATE(31)=1 THEN MOVE OBJECT 2,-5
IF KEYSTATE(30)=1
YROTATE OBJECT 2,WRAPVALUE(MY#-90)
MOVE OBJECT 2,5
YROTATE OBJECT 2,WRAPVALUE(MY#+90)
ENDIF
IF KEYSTATE(32)=1
YROTATE OBJECT 2,WRAPVALUE(MY#+90)
MOVE OBJECT 2,5
YROTATE OBJECT 2,WRAPVALUE(MY#-90)
ENDIF
IF KEYSTATE(16)=1 THEN MZ#=WRAPVALUE(MZ#-5)
IF KEYSTATE(18)=1 THEN MZ#=WRAPVALUE(MZ#+5)
PITCH OBJECT UP 2,INT(0-MOUSEMOVEY())
TURN OBJECT RIGHT 2,INT(MOUSEMOVEX())
ROTATE CAMERA OBJECT ANGLE X(2),OBJECT ANGLE Y(2),OBJECT ANGLE Z(2)
POSITION CAMERA OBJECT POSITION X(2),OBJECT POSITION Y(2),OBJECT POSITION Z(2)
MOVE CAMERA -10
SET CURSOR 0,0
PRINT OBJECT ANGLE X(2)," ",OBJECT ANGLE Y(2)," ",OBJECT ANGLE Z(2)
PRINT CAMERA ANGLE X()," ",CAMERA ANGLE Y()," ",CAMERA ANGLE Z()
SYNC
LOOP
I tried using INT() on that one, thinking the problem might be round-off error with the MOUSEMOVEX() and MOUSEMOVEY() commands but it didn't seem to have an effect. I would appreciate any thoughts to the reasons to these two problems. Thanks.
This is a test. This is only a test. If this were an actual emergency you'd all be dead.