Post by anthonyrbrown on Feb 17, 2024 11:31:58 GMT
While on the Topic of 3D below is the excellent 3DDEMO where I am sure there are tons of possible improvements from the graphics Wizards we have on this forum!
Like Solid Craft? 50/50 Changing form Solid to Transparent? Different Colours? Different Texture? etc. etc.
REM 3DDEMO-1
DEFINT A-Z
TYPE LINETYPE
X AS INTEGER
Y AS INTEGER
Z AS INTEGER
X1 AS INTEGER
Y1 AS INTEGER
Z1 AS INTEGER
END TYPE
DIM POINTS(100) AS LINETYPE
DIM XS(100), YS(100), XE(100), YE(100), XN(100), YN(100)
DIM XS1(100), YS1(100), XE1(100), YE1(100)
DIM X(100), Y(100), Z(100), POINTERS1(100), POINTERS2(100)
DIM R(100)
DIM COSINE&(360), SINE&(360)
CLS
PRINT
PRINT "KEYS TO USE: (TURN NUMLOCK ON!)"
PRINT
PRINT "NUMERIC KEYPAD..CONTROLS YOUR POSITION (5) COMPLETLY STOPS THE CRAFT"
PRINT "ARROW KEYS......CONTROLS THE ROTATION OF THE CRAFT"
PRINT "A...............TOGGLES AUTO CENTER, USE THIS WHEN YOU LOSE THE CRAFT"
PRINT "B...............SLOWS THE CRAFT (BACKWARD)"
PRINT "C...............STOPS THE CRAFT'S ROTATION"
PRINT "F...............EXCELERATES THE CRAFT (FORWARD)"
PRINT "Q...............QUITS"
PRINT "S...............STOPS THE CRAFT"
PRINT "V...............RESETS THE CRAFT TO STARTING POSITION"
PRINT "-...............FORWARD EXCELERATION"
PRINT "+...............BACKWARD EXCELERATION"
PRINT
A = 0
FOR A! = 0 TO 359 / 57.29577951# STEP 1 / 57.29577951#
COSINE&(A) = INT(.5 + COS(A!) * 1024)
SINE&(A) = INT(.5 + SIN(A!) * 1024)
A = A + 1
NEXT
FOR A = 0 TO 44
READ POINTS(A).X, POINTS(A).Y, POINTS(A).Z
READ POINTS(A).X1, POINTS(A).Y1, POINTS(A).Z1
NEXT
NUMBERLINES = 45
NP = 0
FOR A = 0 TO NUMBERLINES - 1
X(NP) = POINTS(A).X
Y(NP) = POINTS(A).Y
Z(NP) = POINTS(A).Z
NP = NP + 1
X(NP) = POINTS(A).X1
Y(NP) = POINTS(A).Y1
Z(NP) = POINTS(A).Z1
NP = NP + 1
NEXT
FOR A = 0 TO NUMBERLINES - 1
XS = POINTS(A).X
YS = POINTS(A).Y
ZS = POINTS(A).Z
FOR B = 0 TO NP - 1
IF X(B) = XS AND Y(B) = YS AND Z(B) = ZS THEN
POINTERS1(A) = B
EXIT FOR
END IF
NEXT
XS = POINTS(A).X1
YS = POINTS(A).Y1
ZS = POINTS(A).Z1
FOR B = 0 TO NP - 1
IF X(B) = XS AND Y(B) = YS AND Z(B) = ZS THEN
POINTERS2(A) = B
EXIT FOR
END IF
NEXT
NEXT
NR = 0
FOR A = 0 TO NUMBERLINES - 1
F1 = POINTERS1(A)
S1 = POINTERS2(A)
IF NR = 0 THEN
R(NR) = F1
NR = NR + 1
ELSE
FOUND = 0
FOR B = 0 TO NR - 1
IF R(B) = F1 THEN
FOUND = -1
EXIT FOR
END IF
NEXT
IF NOT FOUND THEN R(NR) = F1
NR = NR + 1
END IF
FOUND = 0
FOR B = 0 TO NR - 1
IF R(B) = S1 THEN
FOUND = -1
EXIT FOR
END IF
NEXT
IF NOT FOUND THEN R(NR) = S1
NR = NR + 1
NEXT
PRINT "PRESS ANY KEY TO BEGIN..."
A$ = INPUT$(1)
VS = 1
WS = 0
DEG1 = 0
DEG2 = 0
D1 = 0
D2 = 0
SPOS = -250
MYPOS = 0
MX = 0
MY = 0
MZ = 0
OX = 0
OY = 0
OZ = -260
NUMBEROFFRAMES = 0
DEF SEG = &H40
STARTTIME = PEEK(&H6C)
DO
_LIMIT 30
SWAP VS, WS
SCREEN 9, , WS, VS
DEG1 = (DEG1 + D1) MOD 360
DEG2 = (DEG2 + D2) MOD 360
IF DEG1 < 0 THEN DEG1 = DEG1 + 360
IF DEG2 < 0 THEN DEG2 = DEG2 + 360
C1& = COSINE&(DEG1)
S1& = SINE&(DEG1)
C2& = COSINE&(DEG2)
S2& = SINE&(DEG2)
X = SPEED
Y = 0
Z = 0
X1 = (X * C1&) \ 1024
Y1 = (X * S1&) \ 1024
X2 = (X1 * C2&) \ 1024
ZN = (X1 * S2&) \ 1024
OX = OX + X2
OY = OY + Y1
OZ = OZ + ZN
IF OZ > 32000 THEN OZ = 32000
IF OZ < -32000 THEN OZ = -32000
IF OX > 32000 THEN OX = 32000
IF OX < -32000 THEN OX = -32000
IF OY > 32000 THEN OY = 32000
IF OY < -32000 THEN OY = -32000
IF ATLOC THEN
MX = MX + (OX - MX) \ 4
MY = MY + (OY - MY) \ 4
MZ = MZ + ((OZ + 200) - MZ) \ 4
ELSE
MZ = MZ + MZM
MX = MX + MXM
MY = MY + MYM
IF MZ > 32000 THEN MZ = 32000
IF MZ < -32000 THEN MZ = -32000
IF MX > 32000 THEN MX = 32000
IF MX < -32000 THEN MX = -32000
IF MY > 32000 THEN MY = 32000
IF MY < -32000 THEN MY = -32000
END IF
'WAIT &H3DA, 8
_DISPLAY
IF WS = 1 THEN
FOR A = 0 TO LN(WS) - 1
LINE (XS1(A), YS1(A))-(XE1(A), YE1(A)), 0
NEXT
ELSE
FOR A = 0 TO LN(WS) - 1
LINE (XS(A), YS(A))-(XE(A), YE(A)), 0
NEXT
END IF
LOCATE 1, 1
PRINT A$
FOR A = 0 TO NR - 1
R = R(A)
XO = X(R)
YO = Y(R)
ZO = Z(R)
X1 = (XO * C1& - YO * S1&) \ 1024
Y1& = (XO * S1& + YO * C1&) \ 1024 - MY + OY
X1& = (X1 * C2& - ZO * S2&) \ 1024 - MX + OX
ZN = (X1 * S2& + ZO * C2&) \ 1024 - MZ + OZ
IF (MYPOS - ZN) < 15 THEN
XN(R) = -1
YN(R) = 0
ZN = 0
ELSE
V = (1330& * (SPOS - ZN)) \ (MYPOS - ZN)
XN(R) = 320 + X1& + (-X1& * V) \ 1330
YN(R) = 175 + (8 * (Y1& + (-Y1& * V) \ 1330)) \ 10
END IF
NEXT
IF WS = 1 THEN
LN = 0
FOR A = 0 TO NUMBERLINES - 1
F1 = POINTERS1(A)
S1 = POINTERS2(A)
XN = XN(F1)
YN = YN(F1)
IF XN <> -1 THEN
IF XN(S1) <> -1 THEN
X1 = XN(S1)
Y1 = YN(S1)
LINE (X1, Y1)-(XN, YN), 14
XS1(LN) = X1
YS1(LN) = Y1
XE1(LN) = XN
YE1(LN) = YN
LN = LN + 1
END IF
END IF
NEXT
ELSE
LN = 0
FOR A = 0 TO NUMBERLINES - 1
F1 = POINTERS1(A)
S1 = POINTERS2(A)
XN = XN(F1)
YN = YN(F1)
IF XN <> -1 THEN
IF XN(S1) <> -1 THEN
X1 = XN(S1)
Y1 = YN(S1)
LINE (X1, Y1)-(XN, YN), 14
XS(LN) = X1
YS(LN) = Y1
XE(LN) = XN
YE(LN) = YN
LN = LN + 1
END IF
END IF
NEXT
END IF
LN(WS) = LN
K$ = UCASE$(INKEY$)
IF K$ <> "" THEN
SELECT CASE K$
CASE "A"
ATLOC = NOT ATLOC
CASE "+"
MZM = MZM + 2
CASE "-"
MZM = MZM - 2
CASE "5"
MXM = 0
MYM = 0
MZM = 0
CASE "4"
MXM = MXM - 2
CASE "6"
MXM = MXM + 2
CASE "8"
MYM = MYM - 2
CASE "2"
MYM = MYM + 2
CASE "F"
SPEED = SPEED + 5
CASE "B"
SPEED = SPEED - 5
CASE "C"
D1 = 0
D2 = 0
CASE "S"
SPEED = 0
CASE CHR$(0) + CHR$(72)
D1 = D1 + 1
CASE CHR$(0) + CHR$(80)
D1 = D1 - 1
CASE CHR$(0) + CHR$(75)
D2 = D2 - 1
CASE CHR$(0) + CHR$(77)
D2 = D2 + 1
CASE "Q", CHR$(27)
SCREEN 0, , 0, 0
CLS
END
CASE "V"
D1 = 0
D2 = 0
DEG1 = 0
DEG2 = 0
SPEED = 0
END SELECT
END IF
_DISPLAY
LOOP
DATA -157,22,39,-157,-18,39
DATA -157,-18,39,-127,-38,39
DATA -127,-38,39,113,-38,39
DATA 113,-38,39,193,12,39
DATA 33,42,39,33,42,-56
DATA 33,42,-56,-127,42,-56
DATA -127,42,-56,-157,22,-56
DATA -157,22,-56,-157,22,39
DATA -157,22,-56,-157,-18,-56
DATA -157,-18,-56,-157,-18,39
DATA -157,-18,-56,-127,-38,-56
DATA -127,-38,-56,-127,-38,39
DATA -127,-38,-56,113,-38,-56
DATA 113,-38,-56,113,-38,39
DATA 113,-38,-56,193,12,-56
DATA 193,12,-56,193,12,39
DATA -157,22,-56,193,12,-56
DATA 193,12,39,-157,22,39
DATA -56,-13,41,-56,-3,41
DATA -56,-3,41,-26,-3,41
DATA -26,-3,41,-26,7,41
DATA -51,7,41,-31,-13,41
DATA -11,-13,41,-11,-3,41
DATA -11,-3,41,-1,7,41
DATA 9,7,41,9,-8,41
DATA 9,-8,41,24,-8,41
DATA 34,16,41,34,-38,41
DATA 33,-39,41,33,-39,-53
DATA 33,-39,-53,33,15,-53
DATA -42,-38,19,-72,-38,19
DATA -72,-38,19,-72,-38,-41
DATA -72,-38,-41,-42,-38,-41
DATA -42,-38,-41,-42,-38,19
DATA 33,42,39,34,16,41
DATA 33,42,-56,33,15,-53
DATA -157,22,39,-127,42,39
DATA -127,42,-56,-127,42,39
DATA -127,42,39,33,42,39
DATA 159,-8,-56,159,-8,40
DATA 143,-18,-56,143,-18,39
DATA 193,12,39,193,32,30
DATA 33,42,39,193,32,30
DATA 193,32,30,193,32,-47
DATA 33,42,-56,193,32,-47
DATA 193,12,-56,193,32,-47
END