arkivo.art

lofi 3d 3

alexthescott

-- lofi 3d 3 -- alexthescott -- 10/25/21 9:01pm -- based on 3d demo -- by @noahrosamilia -- circle maths -- https://www.cmu.edu/biolphys/deserno/pdf/sphere_equi.pdf -- new seed every day of the year srand(31*stat(81)+stat(82)) p1={7,6,135,10,138,11,139,3,131,12,140,1,129,130,128,0} p2={7,135,10,9,15,143,142,137,14,136,8,2,130,133,128,0} p3={7,15,143,142,14,8,136,137,9,10,135,138,11,139,12,140} p={p1,p2,p3} c=rnd(p) pal(c,1) function draw_shape(s) for i,l in ipairs(s[2]) do draw_line(s[1][l[1]],s[1][l[2]],i) end end function draw_line(p1,p2,c) x0,y0=project(p1) x1,y1=project(p2) line(x0,y0,x1,y1,c) end function draw_point(p,c) x,y=project(p) pset(x,y,c) end function project(p) -- calculate x,y and center it x=(p[1]-cam[1])*mult/(p[3]-cam[3])+127/2 y=-(p[2]-cam[2])*mult/(p[3]-cam[3])+127/2 return x,y end function translate_shape(s,t) -- copy shape, 0 out points, -- keep og lines ns={{},s[2]} -- add displacement to point for p in all(s[1])do add(ns[1],{p[1]+t[1],p[2]+t[2],p[3]+t[3]}) end return ns end function rotate_shape(s,a,r) -- copy shape, 0 out points -- keep og lines ns={{},s[2]} for p in all(s[1])do add(ns[1],rotate_point(p,a,r)) end return ns end function rotate_point(p,a,r) -- figure axis we're rotating if a==1 then x,y,z=3,2,1 elseif a==2 then x,y,z=1,3,2 elseif a==3 then x,y,z=1,2,3 end _x=cos(r)*p[x]-sin(r)*p[y] _y=sin(r)*p[x]+cos(r)*p[y] np={} np[x]=_x np[y]=_y np[z]=p[z] return np end function limit_int(v,l) if v>0 then return min(v,l) else return max(v,-l) end end function burn() for p=0,384 do x=rnd(128)\1 y=rnd(128)\1 pc=pget(x,y) if pc!=0 then pset(x,y,pc-1) else pset(x,y,0) end end end function fuzz(big) if big then sz=10 cnt=512 else sz=3 cnt=384 end for p=0,cnt do x=rnd(128)\1 y=rnd(128)\1 pc=pget(x,y) if pc!=0 then for l=1,rnd(sz)\1 do pset(x-l,y,pc) pset(x+l,y,pc) end end end end function forward() v=c[1] del(c,v) c[#c+1]=v pal(c,1) end function backward() v=c[#c] del(c,v) for i=#c+1,1,-1 do if i!=1 then c[i]=c[i-1] else c[i]=v end end pal(c,1) end function build_circ(shape,n,s) phi=2*(3-sqrt(5)) for i=0,n do y=1-(i/(n-1))*2 r=sqrt(1-y*y) theta=phi*i x=cos(theta)*r z=sin(theta)*r add(shape[1],{x*s,y*s,z*s}) end for i=1,#shape[1]-2 do add(shape[2],{i,i+2}) end end function centr_circ(r,c) for x=0,128 do y=sqrt(r^2-(x-64)^2)+64 line(x,128,x,y,c) line(x,0,x,128-y,c) end end for i=1,rnd()*16 do forward() end for p=1,24 do po={p,p+1} end cam={0,0,-1.5} mult=64 cir1={{},{}} cir2={{},{}} build_circ(cir1,256,1) build_circ(cir2,128,2/3) cir2=rotate_shape(cir2,1,0.25) burn_count=10+(50*rnd())\1 burn_var=3+(10*rnd())\1 cntr_dthr=rnd()<=0.25 a=1+rnd(2)\1 ac=(1+rnd(10)\1)*60 month=stat(81) day=stat(82) cls() _set_fps(60) ::♥:: if t()<2 then print("lofi 3d 3",46,59,1) print(month.."/"..day,55,65) else if btn(❎) and btn(🅾️) or time()%burn_var==0 then burn_count=10+(50*rnd())\1 burn_var=3+(10*rnd())\1 centr_circ(64,0) elseif burn_count>0 then centr_circ(64,0) burn_count-=1 else centr_circ(32,0) if cntr_dthr then fillp(0b0111010101111111) circfill(63,63,32,1) fillp() end end if btn(⬅️) then cam[1] -= 0.01 end if btn(➡️) then cam[1] += 0.01 end if btn(⬆️) then cam[2] += 0.01 end if btn(⬇️) then cam[2] -= 0.01 end if btn(❎) then cam[3] -= 0.01 end if btn(🅾️) then cam[3] += 0.01 end if btn(⬆️) and btn(⬇️) or btn(➡️) and btn(⬅️) then print("cam.x="..cam[1],0,0,2) print("cam.y="..cam[2],0,6,2) print("cam.z="..cam[3],0,12,2) end if ac<=0 then if a==1 then a=2 else a=1 end ac=(1+rnd(10)\1)*60 else ac-=1 end cir2=rotate_shape(cir2,a,0.004) cir1=rotate_shape(cir1,a,0.004) draw_shape(cir2) draw_shape(cir1) end flip() goto ♥

Blockchain tezos
Smart Contract KT1RJ6PbjHpwc3M5rw5s2Nbmefwbuwbdxton
Platform HEN
Token ID 474567
Minted at 26 Oct 2021, 04:10 UTC

Metadata URI Metadata URI
Artifact URI Artifact URI

interactive , pico8 , pico-8

JavaScript true
Networked false

Timestamp (UTC) 2024-08-17T13:49:53.937Z
Snapshot version 1
External network calls 0
Download Snapshot Download
Snapshot Image