kopia lustrzana https://github.com/villares/sketch-a-day
115 wiersze
2.4 KiB
Python
115 wiersze
2.4 KiB
Python
"""
|
|
Terrain Box
|
|
"""
|
|
|
|
add_library('peasycam')
|
|
from third_point import third_point
|
|
from face_draw import face_draw
|
|
|
|
L, H = 100, 100
|
|
A, B, C, D = H + 10, H + 0, H + 50, H + 20
|
|
|
|
def setup():
|
|
global cam
|
|
size(800, 500, P3D)
|
|
cam = PeasyCam(this, 660)
|
|
hint(ENABLE_DEPTH_SORT)
|
|
|
|
def draw():
|
|
# lights()
|
|
background(200)
|
|
# ortho()
|
|
strokeWeight(2)
|
|
stroke(0)
|
|
fill(255, 200)
|
|
translate(100, 0, -100)
|
|
faces_3D()
|
|
cam.beginHUD()
|
|
translate(100, 300)
|
|
faces_2D()
|
|
cam.endHUD()
|
|
|
|
def faces_2D():
|
|
noFill()
|
|
stroke(0)
|
|
b_2d = PVector(0, -B)
|
|
c_2d = PVector(L, -C)
|
|
|
|
face_draw((b_2d, c_2d, (L, 0), (0, 0))) # face 0
|
|
face_draw((c_2d, (L * 2, -D), (L * 2, 0), (L, 0))) # face 1
|
|
face_draw(((L * 2, -D), (L * 3, -A), (L * 3, 0), (L * 2, 0))) # face 2
|
|
face_draw(((L * 3, -A), (L * 4, -B), (L * 4, 0), (L * 3, 0))) # face 3
|
|
|
|
bc = PVector.dist(b_2d, c_2d) # (0, 0, -B, L, 0, -C)
|
|
bd = dist(0, 0, B, L, L, D)
|
|
cd = dist(L, 0, C, L, L, D)
|
|
d_2d = third_point(b_2d, c_2d, bd, cd)
|
|
stroke(200, 200, 0)
|
|
line(b_2d.x, b_2d.y, d_2d.x, d_2d.y)
|
|
stroke(0)
|
|
line(c_2d.x, c_2d.y, d_2d.x, d_2d.y)
|
|
|
|
ab = dist(0, A, L, B)
|
|
ad = dist(0, A, L, D)
|
|
a_2d = third_point(b_2d, d_2d, ab, ad)
|
|
stroke(0)
|
|
line(b_2d.x, b_2d.y, a_2d.x, a_2d.y)
|
|
line(d_2d.x, d_2d.y, a_2d.x, a_2d.y)
|
|
rect(0, 0, L, L)
|
|
|
|
def keyPressed():
|
|
global A, B, C, D
|
|
if key == "q":
|
|
A += 5
|
|
if key == "a":
|
|
A -= 5
|
|
if key == "w":
|
|
B += 5
|
|
if key == "s":
|
|
B -= 5
|
|
if key == "e":
|
|
C += 5
|
|
if key == "d":
|
|
C -= 5
|
|
if key == "r":
|
|
D += 5
|
|
if key == "f":
|
|
D -= 5
|
|
|
|
def faces_3D():
|
|
face_draw(((0, 0, 0), # floor f
|
|
(L, 0, 0),
|
|
(L, L, 0),
|
|
(0, L, 0)))
|
|
|
|
face_draw(((0, 0, B), # face 0
|
|
(L, 0, C),
|
|
(L, 0, 0),
|
|
(0, 0, 0)))
|
|
|
|
face_draw(((L, L, D), # face 1
|
|
(L, 0, C),
|
|
(L, 0, 0),
|
|
(L, L, 0)))
|
|
|
|
face_draw(((L, L, D), # face 2
|
|
(0, L, A),
|
|
(0, L, 0),
|
|
(L, L, 0)))
|
|
|
|
face_draw(((0, 0, B), # face 3
|
|
(0, L, A),
|
|
(0, L, 0),
|
|
(0, 0, 0)))
|
|
|
|
face_draw(((0, 0, B),
|
|
(L, L, D),
|
|
(0, L, A)))
|
|
|
|
face_draw(((0, 0, B),
|
|
(L, L, D),
|
|
(L, 0, C)))
|
|
|
|
stroke(200, 200, 0)
|
|
line(0, 0, B, L, L, D)
|