Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ 3D-Π³ΡΠ°ΡΠΈΠΊΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Visual Basic
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ 3D-Π³ΡΠ°ΡΠΈΠΊΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Visual Basic". Obj. polygon (11).v_pointer (0) = 4: obj. polygon (11).v_pointer (1) = 7: obj. polygon (11).v_pointer (2) = 3. Obj. polygon (10).v_pointer (0) = 4: obj. polygon (10).v_pointer (1) = 3: obj. polygon (10).v_pointer (2) = 0. ΠΠΠ€ΠΠΠ Π: ΠΠ‘ΠΠΠΈΠ£ ΠΠ°Π±ΠΎΡΠ°ΡΠΎΡΠ½Π°Ρ ΡΠ°Π±ΠΎΡΠ° ΠΏΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Obj. polygon (9).v_pointer (0) = 4: obj. polygon… Π§ΠΈΡΠ°ΡΡ Π΅ΡΡ >
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ 3D-Π³ΡΠ°ΡΠΈΠΊΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Visual Basic (ΡΠ΅ΡΠ΅ΡΠ°Ρ, ΠΊΡΡΡΠΎΠ²Π°Ρ, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ)
ΠΠΠ€ΠΠΠ Π: ΠΠ‘ΠΠΠΈΠ£ ΠΠ°Π±ΠΎΡΠ°ΡΠΎΡΠ½Π°Ρ ΡΠ°Π±ΠΎΡΠ° ΠΏΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ
" Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ 3D-Π³ΡΠ°ΡΠΈΠΊΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Visual Basic"
ΠΡΡΠ°Π½Π±Π΅, 2009 Π³ΠΎΠ΄
ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π Π°Π±ΠΎΡΠ΅ΠΉ Π€ΠΎΡΠΌΡ
ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ (Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΠΈ)
ΠΡΡ ΠΎΠ΄Π½ΡΠΉ (ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΊΠΎΠ΄)
Private FPS As Long
Private all_stop As Boolean
Private cube As Object3D
Private Sub Form_Load ()
Call LoadObject (cube)
all_stop = False
End Sub
Private Sub Form_Unload (Cancel As Integer)
all_stop = True
End Sub
Private Sub Timer1_Timer ()
'
Dim temp As Object3D
Dim ang As Single
'
Timer1. Enabled = False
Do
temp = cube
'
Me. Cls
Call ScaleObject (10, 10, 10, temp)
Call RotateObject (ang, -0.5, 0, temp)
Call TranslateObject (0, 0, 50, temp)
Call ProjectObject (temp, Me)
'
Call DisplayObject (temp, Me)
'
FPS = FPS + 1
'
ang = ang + 0.02: If ang > 6.282 Then ang = 0
'
DoEvents
'
Loop Until all_stop
'
End Sub
Private Sub Timer2_Timer ()
Me. Caption = «VB/3D — Tutorial #1 — FPS =» + Str$(FPS)
'
FPS = 0
'
End Sub
Private Type Vertex3D
'
x As Single
y As Single
z As Single
'
sx As Long
sy As Long
'
End Type
'
Private Type Polygon3D
'
v_pointer (2) As Long
'
colr As Long
'
End Type
'
Public Type Object3D
'
vertex () As Vertex3D
polygon () As Polygon3D
'
End Type
Public Sub LoadObject (obj As Object3D)
ReDim obj. vertex (7), obj. polygon (11)
obj.vertex (0).x = -1: obj. vertex (0).y = -1: obj. vertex (0).z = -1
obj.vertex (1).x = -1: obj. vertex (1).y = -1: obj. vertex (1).z = 1
obj.vertex (2).x = 1: obj. vertex (2).y = -1: obj. vertex (2).z = 1
obj.vertex (3).x = 1: obj. vertex (3).y = -1: obj. vertex (3).z = -1
obj.vertex (4).x = -1: obj. vertex (4).y = 1: obj. vertex (4).z = -1
obj.vertex (5).x = -1: obj. vertex (5).y = 1: obj. vertex (5).z = 1
obj.vertex (6).x = 1: obj. vertex (6).y = 1: obj. vertex (6).z = 1
obj.vertex (7).x = 1: obj. vertex (7).y = 1: obj. vertex (7).z = -1
obj.polygon (0).v_pointer (0) = 0: obj. polygon (0).v_pointer (1) = 2: obj. polygon (0).v_pointer (2) = 1
obj.polygon (0).colr = RGB (255, 0, 0)
obj.polygon (1).v_pointer (0) = 0: obj. polygon (1).v_pointer (1) = 3: obj. polygon (1).v_pointer (2) = 2
obj.polygon (1).colr = RGB (255, 0, 0)
obj.polygon (2).v_pointer (0) = 4: obj. polygon (2).v_pointer (1) = 0: obj. polygon (2).v_pointer (2) = 1
obj.polygon (2).colr = RGB (255, 0, 0)
obj.polygon (3).v_pointer (0) = 4: obj. polygon (3).v_pointer (1) = 1: obj. polygon (3).v_pointer (2) = 5
obj.polygon (3).colr = RGB (255, 0, 0)
obj.polygon (4).v_pointer (0) = 5: obj. polygon (4).v_pointer (1) = 1: obj. polygon (4).v_pointer (2) = 2
obj.polygon (4).colr = RGB (255, 0, 0)
obj.polygon (5).v_pointer (0) = 5: obj. polygon (5).v_pointer (1) = 2: obj. polygon (5).v_pointer (2) = 6
obj.polygon (5).colr = RGB (255, 0, 0)
obj.polygon (6).v_pointer (0) = 7: obj. polygon (6).v_pointer (1) = 2: obj. polygon (6).v_pointer (2) = 3
obj.polygon (6).colr = RGB (255, 0, 0)
obj.polygon (7).v_pointer (0) = 7: obj. polygon (7).v_pointer (1) = 6: obj. polygon (7).v_pointer (2) = 2
obj.polygon (7).colr = RGB (255, 0, 0)
obj.polygon (8).v_pointer (0) = 4: obj. polygon (8).v_pointer (1) = 5: obj. polygon (8).v_pointer (2) = 6
obj.polygon (8).colr = RGB (255, 0, 0)
obj.polygon (9).v_pointer (0) = 4: obj. polygon (9).v_pointer (1) = 6: obj. polygon (9).v_pointer (2) = 7
obj.polygon (9).colr = RGB (255, 0, 0)
obj.polygon (10).v_pointer (0) = 4: obj. polygon (10).v_pointer (1) = 3: obj. polygon (10).v_pointer (2) = 0
obj.polygon (10).colr = RGB (255, 0, 0)
obj.polygon (11).v_pointer (0) = 4: obj. polygon (11).v_pointer (1) = 7: obj. polygon (11).v_pointer (2) = 3
obj.polygon (11).colr = RGB (255, 0, 0)
'
End Sub
Public Sub DisplayObject (obj As Object3D, frm As Object)
Dim poly As Long
For poly = 0 To UBound (obj.polygon ())
Call DrawTriangle (obj, poly, frm)
Next
End Sub
Private Sub DrawTriangle (obj As Object3D, poly As Long, frm As Object)
Dim x0 As Long, y0 As Long
Dim x1 As Long, y1 As Long
Dim x2 As Long, y2 As Long
x0 = obj. vertex (obj.polygon (poly).v_pointer (0)).sx
y0 = obj. vertex (obj.polygon (poly).v_pointer (0)).sy
x1 = obj. vertex (obj.polygon (poly).v_pointer (1)).sx
y1 = obj. vertex (obj.polygon (poly).v_pointer (1)).sy
x2 = obj. vertex (obj.polygon (poly).v_pointer (2)).sx
y2 = obj. vertex (obj.polygon (poly).v_pointer (2)).sy
frm. Line (x0, y0) — (x1, y1), obj. polygon (poly).colr
frm. Line — (x2, y2), obj. polygon (poly).colr
frm. Line — (x0, y0), obj. polygon (poly).colr
End Sub
Public Sub ProjectObject (obj As Object3D, frm As Object)
Dim pnt As Long, dz As Single
For pnt = 0 To UBound (obj.vertex ())
dz = obj. vertex (pnt).z: If dz <= 0 Then dz = 0.001
obj.vertex (pnt).sx = (frm. ScaleWidth / 2) + ((obj.vertex (pnt).x * 300) / dz)
obj.vertex (pnt).sy = (frm. ScaleHeight / 2) + ((obj.vertex (pnt).y * 300) / dz)
Next
End Sub
Public Sub RotateObject (yaw As Single, pit As Single, rol As Single, obj As Object3D)
Dim pnt As Long
Dim x0 As Single, y0 As Single, z0 As Single
Dim x1 As Single, y1 As Single, z1 As Single
Dim x2 As Single, y2 As Single, z2 As Single
'
For pnt = 0 To UBound (obj.vertex ())
x0 = Cos (yaw) * obj. vertex (pnt).x + Sin (yaw) * obj. vertex (pnt).z
y0 = obj. vertex (pnt).y
z0 = Sin (yaw) * obj. vertex (pnt).x — Cos (yaw) * obj. vertex (pnt).z
x1 = x0
y1 = Cos (pit) * y0 + Sin (pit) * z0
z1 = Sin (pit) * y0 — Cos (pit) * z0
x2 = Cos (rol) * x1 + Sin (rol) * y1
y2 = Sin (rol) * x1 — Cos (rol) * y1
z2 = z1
obj.vertex (pnt).x = x2
obj.vertex (pnt).y = y2
obj.vertex (pnt).z = z2
Next
End Sub
Public Sub ScaleObject (xs As Single, ys As Single, zs As Single, obj As Object3D)
Dim pnt As Long
For pnt = 0 To UBound (obj.vertex ())
obj.vertex (pnt).x = obj. vertex (pnt).x * xs
obj.vertex (pnt).y = obj. vertex (pnt).y * ys
obj.vertex (pnt).z = obj. vertex (pnt).z * zs
Next
End Sub
Public Sub TranslateObject (tx As Long, ty As Long, tz As Long, obj As Object3D)
Dim pnt As Long
For pnt = 0 To UBound (obj.vertex ())
obj.vertex (pnt).x = obj. vertex (pnt).x + tx
obj.vertex (pnt).y = obj. vertex (pnt).y + ty
obj.vertex (pnt).z = obj. vertex (pnt).z + tz
Next
End Sub
Private FPS As Long
Private all_stop As Boolean
Private cube As Object3D
Private Sub Form_Load ()
Call LoadObject (cube)
all_stop = False
End Sub
Private Sub Form_Unload (Cancel As Integer)
all_stop = True
End Sub
Private Sub Timer1_Timer ()
'
Dim temp As Object3D
Dim ang As Single
'
Timer1. Enabled = False
Do
temp = cube
'
Me. Cls
Call ScaleObject (10, 10, 10, temp)
Call RotateObject (ang, -0.5, 0, temp)
Call TranslateObject (0, 0, 50, temp)
Call ProjectObject (temp, Me)
'
Call DisplayObject (temp, Me)
'
FPS = FPS + 1
'
ang = ang + 0.02: If ang > 6.282 Then ang = 0
'
DoEvents
'
Loop Until all_stop
'
End Sub
Private Sub Timer2_Timer ()
Me. Caption = «VB/3D — Tutorial #1 — FPS =» + Str$(FPS)
'
FPS = 0
'
End Sub
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΊΠΎΠ΄ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΠΎ Π‘ΠΎΠ·Π΄Π°Π½ΠΈΡ 3D — Π³ΡΠ°ΡΠΈΠΊΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Visual Basic, ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , ΡΡΠ½ΠΊΡΠΈΠΉ, ΡΠΈΠΊΠ»ΠΎΠ², ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ².
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ 3D-Π³ΡΠ°ΡΠΈΠΊΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ Visual Basic 6.0, ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΡΠΊΡΠ°Π½Π½ΠΎΠΉ ΡΠΎΡΠΌΡ, Π½Π° ΠΊΠΎΡΠΎΡΡΡ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΎ 2 ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Timer (Timer1, Timer2)
ΠΠΊΠ½ΠΎ Π€ΠΎΡΠΌΡ
ΠΠΊΠ½ΠΎ ΡΠΎΡΠΌΡ, ΡΠ°ΡΡΠΎ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΠΎΠ΅ ΠΏΡΠΎΡΡΠΎ «ΡΠΎΡΠΌΠ°», ΡΠ²Π»ΡΠ΅ΡΡΡ Π³Π»Π°Π²Π½ΡΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. Π€ΠΎΡΠΌΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Π΄Π»Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ. Π’ΠΎΡΠΊΠΈ ΡΠ΅ΡΠΊΠΈ Π½Π° ΡΠΎΡΠΌΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠΌΠΎΠ³Π°ΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΈ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π΅ Π²ΠΈΠ΄Π½Ρ. ΠΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ Visual Basic ΠΎΡΠΊΡΡΠ²Π°ΡΡΠ°ΡΡΡ Π½Π° ΡΠΊΡΠ°Π½Π΅ ΡΠΎΡΠΌΠ° Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ. ΠΠΎΡΠ»Π΅ ΡΠ΅Π»ΡΠΊΠ° Π½Π° ΠΏΠΈΠΊΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΡΡΠ΅Π±ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΡΡΡΠΎΡ ΠΌΡΡΠΈ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΎΡΠΌΡ ΠΊΡΠ΅ΡΡΠΈΠΊΠ°. Π’Π΅ΠΏΠ΅ΡΡ Π½ΡΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ Π² ΡΠΎΡΠΌΠ΅ Π½Π°ΡΠ°Π»ΡΠ½ΡΠΉ ΡΠ³ΠΎΠ» ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ, Π½Π°ΠΆΠ°ΡΡ Π»Π΅Π²ΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ ΠΌΡΡΠΈ ΠΈ, Π½Π΅ ΠΎΡΠΏΡΡΠΊΠ°Ρ Π΅Π΅, ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°. ΠΠΎΡΠ»Π΅ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΡ Π½ΡΠΆΠ½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΎΡΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΈ Π² ΡΠΎΡΠΌΠ΅ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΡΠ±ΡΠ°Π½Π½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ.
ΠΠ»Π΅ΠΌΠ΅Π½Ρ Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π’Π°ΠΉΠΌΠ΅Ρ (Timer)
ΠΠ°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΠΉΠΌΠ΅ΡΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ Ρ ΠΎΡΠΎΡΠΈΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π²Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ. Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ°ΠΉΠΌΠ΅ΡΠ° Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΈΠ»ΠΈ Π·Π°Π²Π΅ΡΡΠ°ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΠΌΠΎΠΌΠ΅Π½ΡΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. Π’Π°ΠΉΠΌΠ΅Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌ ΠΈ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π² ΡΠΎΠ½ΠΎΠ²ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅. ΠΠΎ Π²ΡΠ΅ΠΌΡ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΠΉΠΌΠ΅Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ Π² ΡΠΎΡΠΌΠ΅, Π½ΠΎ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΎΠ½ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡΠΌ.
Π‘ΠΎΠ±ΡΡΠΈΡ
Π’Π°ΠΉΠΌΠ΅Ρ ΠΈΠΌΠ΅Π΅Ρ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΠΎΠ±ΡΡΠΈΠ΅ — Timer, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΏΠΎ ΠΈΡΡΠ΅ΡΠ΅Π½ΠΈΠΈ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»Π°.
Π‘Π²ΠΎΠΉΡΡΠ²Π°
ΠΠ»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»Π° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΠ»ΡΠΆΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Interval, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π² ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄Π°Ρ . ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π°Π΄Π°Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ 250 Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΠΎΠ±ΡΡΠΈΠ΅ Timer ΡΠ΅ΡΠ΅Π· ΠΊΠ°ΠΆΠ΄ΡΠ΅ 250 ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π°ΠΊΡΠΈΠ²Π½ΠΎ. ΠΠ»Ρ ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ°ΠΉΠΌΠ΅ΡΠ° ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΡΠΈΡΠ²ΠΎΠΈΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Ρ Interval Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π ΠΈΠ»ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Ρ Enabled Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ False. ΠΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠΉ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π» ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ 64 757 ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄. ΠΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΎΠΌΠ½ΠΈΡΡ, ΡΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ 18,2 ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ ΡΠ°ΠΉΠΌΠ΅ΡΠ° Π² ΡΠ΅ΠΊΡΠ½Π΄Ρ, ΠΏΠΎΡΡΠΎΠΌΡ ΡΠΎΡΠ½ΠΎΡΡΡ Π·Π°Π΄Π°Π½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»Π° ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ ΠΎΠ΄Π½Ρ Π²ΠΎΡΠ΅ΠΌΠ½Π°Π΄ΡΠ°ΡΡΡ ΡΠ΅ΠΊΡΠ½Π΄Ρ. ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ°ΠΊΠΆΠ΅ ΡΡΠ΅ΡΡΡ, ΡΡΠΎ ΠΏΡΠΈ Π±ΠΎΠ»ΡΡΠΎΠΉ Π·Π°Π³ΡΡΠ·ΠΊΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ (ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠ΅ΡΠΈ, ΠΏΠ΅ΡΠ°ΡΡ ΠΈ Ρ. ΠΏ.) ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ Π΅ΡΠ΅ ΡΠ΅ΠΆΠ΅. Π Windows Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 32 ΡΠ°ΠΉΠΌΠ΅ΡΠΎΠ². ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΡΠ°ΠΊΠΆΠ΅ Π½ΡΠΆΠ΅Π½ ΡΠ°ΠΉΠΌΠ΅Ρ, ΡΠΎ Π΄Π»Ρ Π²ΡΠ΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΎΡΡΠ°Π΅ΡΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ 31. ΠΡΠ»ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠΎΠ±ΡΡΠΈΡ Timer Π΄Π»ΠΈΡΡΡ Π΄ΠΎΠ»ΡΡΠ΅, ΡΠ΅ΠΌ Π·Π°Π΄Π°Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΌinterval, ΡΠΎ Π½ΠΎΠ²ΠΎΠ΅ ΡΠΎΠ±ΡΡΠΈΠ΅ Timer Π½Π΅ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ, ΠΏΠΎΠΊΠ° Visual Basic Π½Π΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΡΠΎ ΡΠΎΠ±ΡΡΠΈΠ΅.
ΠΠΎΠ΄ΡΠ»Ρ (Main 3D-Routines.bas)
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ 3D — Π³ΡΠ°ΡΠΈΠΊΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ Visual Basic 6.0, ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΠ²ΠΎΠΈ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ 3D — Π³ΡΠ°ΡΠΈΠΊΠΈ.