§ Скриншот


§ Исходный код

1SCREEN 13
2
3' Vertex
4DATA -1, 1, 1
5DATA  1, 1, 1
6DATA  1,-1, 1
7DATA -1,-1, 1
8DATA -1, 1,-1
9DATA  1, 1,-1
10DATA  1,-1,-1
11DATA -1,-1,-1
12
13' Faces
14DATA 1,0,3,2
15DATA 4,5,6,7
16DATA 0,1,5,4
17DATA 2,3,7,6
18DATA 5,1,2,6
19DATA 0,4,7,3
20
21TYPE vec2
22  x AS SINGLE
23  y AS SINGLE
24END TYPE
25
26TYPE vec3
27  x AS SINGLE
28  y AS SINGLE
29  z AS SINGLE
30END TYPE
31
32DIM v(0 TO 7) AS vec3
33DIM f(0 TO 5, 0 TO 3) AS INTEGER
34DIM p(0 TO 3) AS vec2
35DIM c AS vec3, t AS vec3, r AS vec3, cam AS vec3
36
37' Set camera position
38cam.x = 0: r.x = 0
39cam.y = 0: r.y = 1
40cam.z = 3: r.z = 0
41
42' Read vertex and face cube data
43FOR i = 0 TO 7: READ v(i).x, v(i).y, v(i).z: NEXT
44FOR i = 0 TO 5: READ f(i, 0), f(i, 1), f(i, 2), f(i, 3): NEXT
45
46DO
47
48' List faces
49FOR i = 0 TO 5
50
51  ' List face items
52  FOR j = 0 TO 3
53
54    ' Get vertex id from face `i`, point on face `j`
55    c = v(f(i, j))
56
57    ' Rotate X Axis
58    ' -----------------------------------------
59    t.x = c.x
60    t.y = c.y * COS(r.x) + c.z * SIN(r.x)
61    t.z = c.z * COS(r.x) - c.y * SIN(r.x)
62    c = t
63
64    ' Rotate Y Axis
65    ' -----------------------------------------
66    t.x = c.x * COS(r.y) + c.z * SIN(r.y)
67    t.y = c.y
68    t.z = c.z * COS(r.y) - c.x * SIN(r.y)
69    c = t
70
71    ' Add camera
72    c.x = c.x + cam.x
73    c.y = c.y + cam.y
74    c.z = c.z + cam.z
75
76    ' Save to p(j)
77    p(j).x = 160 + 100 * c.x / c.z
78    p(j).y = 100 - 100 * c.y / c.z
79
80  NEXT
81
82  ' Draw lines
83  FOR j = 0 TO 3
84
85    ' Calculate face direction
86    ABx = p(1).x - p(0).x: ABy = p(1).y - p(0).y
87    ACx = p(2).x - p(0).x: ACy = p(2).y - p(0).y
88
89    ' Face is front
90    IF ACx * ABy < ACy * ABx THEN
91
92      n = (j + 1) MOD 4
93      LINE (p(j).x, p(j).y)-(p(n).x, p(n).y)
94
95    END IF
96
97  NEXT
98
99NEXT
100
101' Wait key
102DO: i$ = INKEY$: LOOP WHILE i$ = ""
103
104CLS
105
106st = .05
107
108' Control keys
109IF i$ = "w" THEN r.x = r.x + st
110IF i$ = "s" THEN r.x = r.x - st
111IF i$ = "a" THEN r.y = r.y + st
112IF i$ = "d" THEN r.y = r.y - st
113IF i$ = "q" THEN r.x = r.x + st: r.y = r.y + st
114IF i$ = "e" THEN r.x = r.x - st: r.y = r.y - st
115
116LOCATE 2, 2: PRINT i$
117
118LOOP WHILE i$ <> CHR$(27)