From be8ea7466e77cc5de75547be90e1a474697cf705 Mon Sep 17 00:00:00 2001 From: mibi88 Date: Tue, 6 Dec 2022 22:43:08 +0100 Subject: [PATCH] =?UTF-8?q?Transf=C3=A9rer=20les=20fichiers=20vers=20''?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mainPE2O.py | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 mainPE2O.py diff --git a/mainPE2O.py b/mainPE2O.py new file mode 100644 index 0000000..33b8a1f --- /dev/null +++ b/mainPE2O.py @@ -0,0 +1,102 @@ +# 3D cube +# by mibi88 + +from PLANE.line import * +from micropython import * +import math, time + +opt_level(3) + +#width(3) + +# unsed some code from https://www.mfitzp.com/creating-a-3d-rotating-cube-with-micropython-and-oled-display/ + +vertices = [ + [1,0,1], + [2,0,-1], + [0,0,-1], + [1,1,-1], +] + +edges = [ + [0, 1, 2], + [0, 1, 3], + [1, 2, 3], + [0, 2, 3] +] + +#vertices=memoryview(vertices) +#edges=memoryview(edges) + +a=0 + + + +def rotate_x(sx, sy, sz, deg): + rad = deg * math.pi / 180 + cosa = math.cos(rad) + sina = math.sin(rad) + y = sy * cosa - sz * sina + z = sy * sina + sz * cosa + return [sx, y, z] + +def rotate_y(sx, sy, sz, angle): + rad = angle * math.pi / 180 + cosa = math.cos(rad) + sina = math.sin(rad) + z = sz * cosa - sx * sina + x = sz * sina + sx * cosa + return [x, sy, z] + +def rotate_z(sx, sy, sz, angle): + rad = angle * math.pi / 180 + cosa = math.cos(rad) + sina = math.sin(rad) + x = sx * cosa - sy * sina + y = sx * sina + sy * cosa + return [x, y, sz] + +def project(sx, sy, sz, px, py, pz, fov = 60, viewer_distance = 8, w=128, h=64): + factor = fov / (viewer_distance + (sz+pz)) + x = (sx+px) * factor + (w/2) + y = -(sy+py) * factor + (h/2) + return [x, y] + +def render(vertices, triangles, rx, ry, rz, px, py, pz, fov = 60, viewer_distance = 6, w=128, h=64): + rx = rx%360 + ry = ry%360 + rz = rz%360 + points = [] + for i in vertices: + i = rotate_x(i[0], i[1], i[2], rx) + i = rotate_y(i[0], i[1], i[2], ry) + i = rotate_z(i[0], i[1], i[2], rz) + pos = project(i[0], i[1], i[2], px, py, pz, fov, viewer_distance, w, h) + #print(pos) + points.append(pos) + #clear() + for i in triangles: + line(points[i[0]], points[i[1]]) + line(points[i[1]], points[i[2]]) + line(points[i[0]], points[i[2]]) + +def draw(): + global a + global vertices, edges + #render(vertices, edges, 345, a, 0, 32, 16) + start=time.time() + clear_screen() + render(vertices, edges, a, a, 0, 0, 0, 0) + show_screen() + tps=(1/(time.time()-start)*4) + print(tps) + a+=1 + +while 1: + try: + draw() + except: + break + """for i in range(1000): + pass""" +"""draw()""" \ No newline at end of file