SYNC ON:SYNC RATE 0:AUTOCAM OFF:HIDE MOUSE `Set the random seed to make sure everything is truly random RANDOMIZE TIMER() `Make 300 randomly sized, randomly coloured, randomly positioned boxes. FOR x = 1 TO 300 MAKE OBJECT BOX x, 10+RND(100),10+RND(100),10+RND(100) POSITION OBJECT x, -400 + RND(800), -400 + RND(800), -400 + RND(800) COLOR OBJECT x, RGB(RND(255),RND(255),RND(255)) NEXT x `The range that objects begin ghosting. range# = 100 `Setup our math system math_setup() `Main loop DO MOVE CAMERA (UPKEY() - DOWNKEY())*0.5 ROTATE CAMERA WRAPVALUE(CAMERA ANGLE X()+(MOUSEMOVEY()*0.1)), WRAPVALUE(CAMERA ANGLE Y()+(MOUSEMOVEX()*0.1)),0 `Store the cam's position for use with the distance calculations. x1# = CAMERA POSITION X() y1# = CAMERA POSITION Y() z1# = CAMERA POSITION Z() FOR x = 1 TO 300 `Calculate distance to each object x2# = OBJECT POSITION X(x) y2# = OBJECT POSITION Y(x) z2# = OBJECT POSITION Z(x) distance# = math_getDist3D(x1#,y1#,z1#,x2#,y2#,z2#) `If distance# is greater than range#, ghost the object. IF distance# > 1000 GHOST OBJECT ON x ELSE GHOST OBJECT OFF x ENDIF `Repeat NEXT x `Display some info text TEXT 0,0,"FPS: "+STR$(SCREEN FPS()) TEXT 0,15,"Move with the arrow keys." TEXT 0,30,"Turn with the mouse" `Refresh the screen SYNC `Repeat LOOP `Call this before using the math function. FUNCTION math_setup() `setup required vectors for distance calculations null = MAKE VECTOR3(1) null = MAKE VECTOR2(2) #CONSTANT vecDist3D = 1 #CONSTANT vecDist2D = 2 ENDFUNCTION `Math functin for getting 3D distance between 2 points. FUNCTION math_getDist3D(X1#,Y1#,Z1#,X2#,Y2#,Z2#) SET VECTOR3 vecDist3D,X1#-X2#,Y1#-Y2#,Z1#-Z2# dist# = LENGTH VECTOR3(vecDist3D) ENDFUNCTION dist#