Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- SCREEN 13
- DIM SHARED Znear
- Znear = .5
- TYPE vec3
- x AS SINGLE
- y AS SINGLE
- z AS SINGLE
- END TYPE
- TYPE vec2
- x AS SINGLE
- y AS SINGLE
- END TYPE
- DIM a1 AS vec3
- DIM a2 AS vec3
- DIM org AS vec3
- DIM rot AS vec3
- size = 16
- org.x = 0: org.y = -.25: org.z = 0
- rot.x = 0: rot.y = 2: rot.z = 0
- DO
- LINE (0, 0)-(320, 200), 1, BF
- ' Horizontal lines
- ' ---------------------
- FOR x = -size TO size
- a1.x = x: a1.y = 0: a1.z = -size
- a2.x = x: a2.y = 0: a2.z = size
- pd a1, a2, org, rot
- NEXT
- ' Vertical lines
- ' ---------------------
- FOR z = -size TO size
- a1.x = -size: a1.y = 0: a1.z = z
- a2.x = size: a2.y = 0: a2.z = z
- pd a1, a2, org, rot
- NEXT
- ' Wait key
- DO: i$ = INKEY$: LOOP WHILE i$ = ""
- ' Up
- IF i$ = CHR$(0) + "H" THEN org.x = org.x - SIN(rot.y) * .1: org.z = org.z - COS(rot.y) * .1
- ' Down
- IF i$ = CHR$(0) + "P" THEN org.x = org.x + SIN(rot.y) * .1: org.z = org.z + COS(rot.y) * .1
- ' Left / Right
- IF i$ = CHR$(0) + "K" THEN rot.y = rot.y - .05
- IF i$ = CHR$(0) + "M" THEN rot.y = rot.y + .05
- ' PgDn/PgUp
- IF i$ = CHR$(0) + "I" THEN org.y = org.y - .1
- IF i$ = CHR$(0) + "Q" THEN org.y = org.y + .1
- LOOP UNTIL i$ = CHR$(27)
- SUB pd (v1 AS vec3, v2 AS vec3, o AS vec3, r AS vec3)
- DIM a AS vec3, b AS vec3, e AS vec3
- DIM c AS vec2, d AS vec2
- ' Move coordinates
- a.x = v1.x + o.x: b.x = v2.x + o.x
- a.y = v1.y + o.y: b.y = v2.y + o.y
- a.z = v1.z + o.z: b.z = v2.z + o.z
- ' RotateY
- rt a, r
- rt b, r
- ' Cross z-near
- t = (Znear - a.z) / (b.z - a.z)
- e.x = a.x + t * (b.x - a.x)
- e.y = a.y + t * (b.y - a.y)
- e.z = a.z + t * (b.z - a.z)
- ' Line behind Znear
- IF a.z < Znear AND b.z < Znear THEN EXIT SUB
- ' Line crossing Znear
- IF a.z > Znear AND b.z < Znear THEN b = e ELSE IF a.z < Znear AND b.z > Znear THEN a = e
- vp a, c
- vp b, d
- LINE (c.x, c.y)-(d.x, d.y), 15
- END SUB
- SUB rt (v AS vec3, r AS vec3)
- DIM m AS vec3
- ' Rotate by Y
- m.x = v.x * COS(r.y) - v.z * SIN(r.y)
- m.y = v.y
- m.z = v.z * COS(r.y) + v.x * SIN(r.y)
- v = m
- END SUB
- SUB vp (a AS vec3, b AS vec2)
- b.x = 160 + a.x * 200 / a.z
- b.y = 100 - a.y * 200 / a.z
- END SUB
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement