Just a little something I wrote on a Saturday.
# Tumbling Wireframe Cube with Hidden Line Removal
# By JRS_5150
# USE RECTANGULAR GRID
# ADJUST GRID SIZE TO SUIT YOUR PERFORMANCE NEEDS
#Set Cube size
size = 20;
#Set color
s=1;
h=floor(time/2)*60;
#Set perspective
perspective=0.008;
#Set roll
roll=time/4;
#set pitch
pitch=time;
#Set yaw
yaw=time/10;
#Define vertices
x0=-1size;
y0=size;
z0=size;
x1=size;
y1=size;
z1=size;
x2=size;
y2=-1size;
z2=size;
x3=-1size;
y3=-1size;
z3=size;
x4=-1size;
y4=size;
z4=-1size;
x5=size;
y5=size;
z5=-1size;
x6=size;
y6=-1size;
z6=-1size;
x7=-1size;
y7=-1size;
z7=-1size;
#Apply roll
x0'=(x0*cos(roll))-(y0*sin(roll));
y0'=(x0*sin(roll))+(y0*cos(roll));
x0=x0';
y0=y0';
x1'=(x1*cos(roll))-(y1*sin(roll));
y1'=(x1*sin(roll))+(y1*cos(roll));
x1=x1';
y1=y1';
x2'=(x2*cos(roll))-(y2*sin(roll));
y2'=(x2*sin(roll))+(y2*cos(roll));
x2=x2';
y2=y2';
x3'=(x3*cos(roll))-(y3*sin(roll));
y3'=(x3*sin(roll))+(y3*cos(roll));
x3=x3';
y3=y3';
x4'=(x4*cos(roll))-(y4*sin(roll));
y4'=(x4*sin(roll))+(y4*cos(roll));
x4=x4';
y4=y4';
x5'=(x5*cos(roll))-(y5*sin(roll));
y5'=(x5*sin(roll))+(y5*cos(roll));
x5=x5';
y5=y5';
x6'=(x6*cos(roll))-(y6*sin(roll));
y6'=(x6*sin(roll))+(y6*cos(roll));
x6=x6';
y6=y6';
x7'=(x7*cos(roll))-(y7*sin(roll));
y7'=(x7*sin(roll))+(y7*cos(roll));
x7=x7';
y7=y7';
#Apply pitch
y0'=(y0*cos(pitch))-(z0*sin(pitch));
z0'=(y0*sin(pitch))+(z0*cos(pitch));
y0=y0';
z0=z0';
y1'=(y1*cos(pitch))-(z1*sin(pitch));
z1'=(y1*sin(pitch))+(z1*cos(pitch));
y1=y1';
z1=z1';
y2'=(y2*cos(pitch))-(z2*sin(pitch));
z2'=(y2*sin(pitch))+(z2*cos(pitch));
y2=y2';
z2=z2';
y3'=(y3*cos(pitch))-(z3*sin(pitch));
z3'=(y3*sin(pitch))+(z3*cos(pitch));
y3=y3';
z3=z3';
y4'=(y4*cos(pitch))-(z4*sin(pitch));
z4'=(y4*sin(pitch))+(z4*cos(pitch));
y4=y4';
z4=z4';
y5'=(y5*cos(pitch))-(z5*sin(pitch));
z5'=(y5*sin(pitch))+(z5*cos(pitch));
y5=y5';
z5=z5';
y6'=(y6*cos(pitch))-(z6*sin(pitch));
z6'=(y6*sin(pitch))+(z6*cos(pitch));
y6=y6';
z6=z6';
y7'=(y7*cos(pitch))-(z7*sin(pitch));
z7'=(y7*sin(pitch))+(z7*cos(pitch));
y7=y7';
z7=z7';
#Apply yaw
x0'=(x0*cos(yaw))-(z0*sin(yaw));
z0'=(x0*sin(yaw))+(z0*cos(yaw));
x0=x0';
z0=z0';
x1'=(x1*cos(yaw))-(z1*sin(yaw));
z1'=(x1*sin(yaw))+(z1*cos(yaw));
x1=x1';
z1=z1';
x2'=(x2*cos(yaw))-(z2*sin(yaw));
z2'=(x2*sin(yaw))+(z2*cos(yaw));
x2=x2';
z2=z2';
x3'=(x3*cos(yaw))-(z3*sin(yaw));
z3'=(x3*sin(yaw))+(z3*cos(yaw));
x3=x3';
z3=z3';
x4'=(x4*cos(yaw))-(z4*sin(yaw));
z4'=(x4*sin(yaw))+(z4*cos(yaw));
x4=x4';
z4=z4';
x5'=(x5*cos(yaw))-(z5*sin(yaw));
z5'=(x5*sin(yaw))+(z5*cos(yaw));
x5=x5';
z5=z5';
x6'=(x6*cos(yaw))-(z6*sin(yaw));
z6'=(x6*sin(yaw))+(z6*cos(yaw));
x6=x6';
z6=z6';
x7'=(x7*cos(yaw))-(z7*sin(yaw));
z7'=(x7*sin(yaw))+(z7*cos(yaw));
x7=x7';
z7=z7';
#Apply perspective projection
x0=x0*(1+(z0*perspective));
y0=y0*(1+(z0*perspective));
x1=x1*(1+(z1*perspective));
y1=y1*(1+(z1*perspective));
x2=x2*(1+(z2*perspective));
y2=y2*(1+(z2*perspective));
x3=x3*(1+(z3*perspective));
y3=y3*(1+(z3*perspective));
x4=x4*(1+(z4*perspective));
y4=y4*(1+(z4*perspective));
x5=x5*(1+(z5*perspective));
y5=y5*(1+(z5*perspective));
x6=x6*(1+(z6*perspective));
y6=y6*(1+(z6*perspective));
x7=x7*(1+(z7*perspective));
y7=y7*(1+(z7*perspective));
#Assign each laser to a line
line=(floor(index/floor(count/12)));
#Select vertices to draw a line between
vax=if(line==0|line==4,x0,0) + if(line==1|line==5,x1,0) + if(line==2|line==6,x2,0) + if(line==3|line==7,x3,0) + if(line==8,x4,0) + if(line==9,x5,0) + if(line==10,x6,0) + if(line==11,x7,0);
vay=if(line==0|line==4,y0,0) + if(line==1|line==5,y1,0) + if(line==2|line==6,y2,0) + if(line==3|line==7,y3,0) + if(line==8,y4,0) + if(line==9,y5,0) + if(line==10,y6,0) + if(line==11,y7,0);
vbx=if(line==0,x1,0) + if(line==1,x2,0) + if(line==2,x3,0) + if(line==3,x0,0) + if(line==4|line==11,x4,0) + if(line==5|line==8,x5,0) + if(line==6|line==9,x6,0) + if(line==7|line==10,x7,0);
vby=if(line==0,y1,0) + if(line==1,y2,0) + if(line==2,y3,0) + if(line==3,y0,0) + if(line==4|line==11,y4,0) + if(line==5|line==8,y5,0) + if(line==6|line==9,y6,0) + if(line==7|line==10,y7,0);
#Hide occluded lines using back-face culling
#Find out which faces are facing towards the camera by checking the winding order of the face's vertices. Faces with counter-clockwise winding orders will be culled.
f0=if(((x1-x0)*(y1+y0))+((x2-x1)*(y2+y1))+((x3-x2)*(y3+y2))+((x0-x3)*(y0+y3))>=0,1,0);
f1=if(((x5-x1)*(y5+y1))+((x6-x5)*(y6+y5))+((x2-x6)*(y2+y6))+((x1-x2)*(y1+y2))>=0,1,0);
f2=if(((x4-x5)*(y4+y5))+((x7-x4)*(y7+y4))+((x6-x7)*(y6+y7))+((x5-x6)*(y5+y6))>=0,1,0);
f3=if(((x0-x4)*(y0+y4))+((x3-x0)*(y3+y0))+((x7-x3)*(y7+y3))+((x4-x7)*(y4+y7))>=0,1,0);
f4=if(((x5-x4)*(y5+y4))+((x1-x5)*(y1+y5))+((x0-x1)*(y0+y1))+((x4-x0)*(y4+y0))>=0,1,0);
f5=if(((x2-x3)*(y2+y3))+((x6-x2)*(y6+y2))+((x7-x6)*(y7+y6))+((x3-x7)*(y3+y7))>=0,1,0);
#Count the number of unculled faces on each line. lines with no unculled faces will be removed.
l0=f0+f4;
l1=f0+f1;
l2=f0+f5;
l3=f0+f3;
l4=f3+f4;
l5=f1+f4;
l6=f1+f5;
l7=f3+f5;
l8=f2+f4;
l9=f1+f2;
la=f2+f5;
lb=f2+f3;
#Remove hidden lines
visible=if(line==0 & l0,1,0)+if(line==1 & l1,1,0)+if(line==2 & l2,1,0)+if(line==3 & l3,1,0)+if(line==4 & l4,1,0)+if(line==5 & l5,1,0)+if(line==6 & l6,1,0)+if(line==7 & l7,1,0)+if(line==8 & l8,1,0)+if(line==9 & l9,1,0)+if(line==10 & la,1,0)+if(line==11 & lb,1,0);
#Draw a line
x'=lerp((index%floor(count/12))/(floor(count/12)-1),vax,vbx);
y'=lerp((index%floor(count/12))/(floor(count/12)-1),vay,vby);
#Hide extra lasers
v=if(index>(floor(count/12)*12),0,visible);