🎨 formating console3D test
This commit is contained in:
parent
688fbe8c5d
commit
fd93fbafdf
|
@ -16,8 +16,8 @@ var ppm = func(filename, width, height, RGB) {
|
|||
io.close(fd);
|
||||
}
|
||||
|
||||
var width = 1920;
|
||||
var height = 1080;
|
||||
var width = 1920 * 2;
|
||||
var height = 1080 * 2;
|
||||
var bar = (os.platform()=="windows")?
|
||||
process_bar.bar(front:"sharp", back:"point", sep:"line", length:50):
|
||||
process_bar.high_resolution_bar(50);
|
||||
|
|
|
@ -31,7 +31,8 @@ func() {
|
|||
runtime.gc.extend("vec", 8);
|
||||
}();
|
||||
|
||||
var (max,min,sqrt,sin,cos,abs)=(
|
||||
# alias
|
||||
var (max, min, sqrt, sin, cos, abs) = (
|
||||
math.max,
|
||||
math.min,
|
||||
math.sqrt,
|
||||
|
@ -40,12 +41,12 @@ var (max,min,sqrt,sin,cos,abs)=(
|
|||
math.abs
|
||||
);
|
||||
|
||||
var (vec2,vec3)=(
|
||||
var (vec2, vec3) = (
|
||||
libmat.vec2.new,
|
||||
libmat.vec3.new
|
||||
);
|
||||
|
||||
var (vec2add,vec2sub,vec2mul,vec2div,vec2len)=(
|
||||
var (vec2add, vec2sub, vec2mul, vec2div, vec2len) = (
|
||||
libmat.vec2.add,
|
||||
libmat.vec2.sub,
|
||||
libmat.vec2.mul,
|
||||
|
@ -53,7 +54,7 @@ var (vec2add,vec2sub,vec2mul,vec2div,vec2len)=(
|
|||
libmat.vec2.len
|
||||
);
|
||||
|
||||
var (vec3add,vec3sub,vec3mul,vec3div,vec3neg,vec3norm,vec3len,vec3dot)=(
|
||||
var (vec3add, vec3sub, vec3mul, vec3div, vec3neg, vec3norm, vec3len, vec3dot) = (
|
||||
libmat.vec3.add,
|
||||
libmat.vec3.sub,
|
||||
libmat.vec3.mul,
|
||||
|
@ -64,116 +65,147 @@ var (vec3add,vec3sub,vec3mul,vec3div,vec3neg,vec3norm,vec3len,vec3dot)=(
|
|||
libmat.vec3.dot
|
||||
);
|
||||
|
||||
var (rotateX,rotateY,rotateZ)=(
|
||||
var (rotateX, rotateY, rotateZ) = (
|
||||
libmat.vec3.rx,
|
||||
libmat.vec3.ry,
|
||||
libmat.vec3.rz,
|
||||
);
|
||||
|
||||
var use_raw = func() {
|
||||
vec2 = func(x,y) {return [x,y];}
|
||||
vec2add = func(v1,v2) {return [v1[0]+v2[0],v1[1]+v2[1]];}
|
||||
vec2sub = func(v1,v2) {return [v1[0]-v2[0],v1[1]-v2[1]];}
|
||||
vec2mul = func(v1,v2) {return [v1[0]*v2[0],v1[1]*v2[1]];}
|
||||
vec2div = func(v1,v2) {return [v1[0]/v2[0],v1[1]/v2[1]];}
|
||||
vec3 = func(x,y,z) {return [x,y,z];}
|
||||
vec3add = func(v1,v2) {return [v1[0]+v2[0],v1[1]+v2[1],v1[2]+v2[2]];}
|
||||
vec3sub = func(v1,v2) {return [v1[0]-v2[0],v1[1]-v2[1],v1[2]-v2[2]];}
|
||||
vec3mul = func(v1,v2) {return [v1[0]*v2[0],v1[1]*v2[1],v1[2]*v2[2]];}
|
||||
vec3div = func(v1,v2) {return [v1[0]/v2[0],v1[1]/v2[1],v1[2]/v2[2]];}
|
||||
vec3neg = func(v) {return [-v[0],-v[1],-v[2]];}
|
||||
vec2 = func(x, y) {return [x,y];}
|
||||
vec2add = func(v1, v2) {return [v1[0]+v2[0],v1[1]+v2[1]];}
|
||||
vec2sub = func(v1, v2) {return [v1[0]-v2[0],v1[1]-v2[1]];}
|
||||
vec2mul = func(v1, v2) {return [v1[0]*v2[0],v1[1]*v2[1]];}
|
||||
vec2div = func(v1, v2) {return [v1[0]/v2[0],v1[1]/v2[1]];}
|
||||
vec2len = func(v) {var (x,y)=(v[0],v[1]); return sqrt(x*x+y*y);}
|
||||
|
||||
vec3 = func(x, y, z) {return [x,y,z];}
|
||||
vec3add = func(v1, v2) {return [v1[0]+v2[0],v1[1]+v2[1],v1[2]+v2[2]];}
|
||||
vec3sub = func(v1, v2) {return [v1[0]-v2[0],v1[1]-v2[1],v1[2]-v2[2]];}
|
||||
vec3mul = func(v1, v2) {return [v1[0]*v2[0],v1[1]*v2[1],v1[2]*v2[2]];}
|
||||
vec3div = func(v1, v2) {return [v1[0]/v2[0],v1[1]/v2[1],v1[2]/v2[2]];}
|
||||
vec3neg = func(v) {return [-v[0],-v[1],-v[2]];}
|
||||
vec3len = func(v) {var (x,y,z)=(v[0],v[1],v[2]); return sqrt(x*x+y*y+z*z);}
|
||||
vec3norm = func(v) {var t=vec3len(v); return vec3div(v,[t,t,t]);}
|
||||
vec3dot = func(a,b) {return a[0]*b[0]+a[1]*b[1]+a[2]*b[2];}
|
||||
rotateX = func(a,angle) {return [a[0],a[2]*sin(angle)+a[1]*cos(angle),a[2]*cos(angle)-a[1]*sin(angle)];}
|
||||
rotateY = func(a,angle) {return [a[0]*cos(angle)-a[2]*sin(angle),a[1],a[0]*sin(angle)+a[2]*cos(angle)];}
|
||||
rotateZ = func(a,angle) {return [a[0]*cos(angle)-a[1]*sin(angle),a[0]*sin(angle)+a[1]*cos(angle),a[2]];}
|
||||
vec3dot = func(a, b) {
|
||||
return a[0]*b[0] + a[1]*b[1] + a[2]*b[2];
|
||||
}
|
||||
|
||||
rotateX = func(a, angle) {
|
||||
return [
|
||||
a[0],
|
||||
a[2] * sin(angle) + a[1] * cos(angle),
|
||||
a[2] * cos(angle) - a[1] * sin(angle)
|
||||
];
|
||||
}
|
||||
rotateY = func(a, angle) {
|
||||
return [
|
||||
a[0] * cos(angle) - a[2] * sin(angle),
|
||||
a[1],
|
||||
a[0] * sin(angle) + a[2] * cos(angle)
|
||||
];
|
||||
}
|
||||
rotateZ = func(a, angle) {
|
||||
return [
|
||||
a[0] * cos(angle) - a[1] * sin(angle),
|
||||
a[0] * sin(angle) + a[1] * cos(angle),
|
||||
a[2]
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
var clamp = func(value,_min,_max) {
|
||||
return max(min(value,_max),_min);
|
||||
var clamp = func(value, _min, _max) {
|
||||
return max(min(value, _max), _min);
|
||||
}
|
||||
var sign = func(a) {
|
||||
return (0<a)-(a<0);
|
||||
return (0 < a) - (a < 0);
|
||||
}
|
||||
var step = func(edge,x) {
|
||||
return x>edge;
|
||||
var step = func(edge, x) {
|
||||
return x > edge;
|
||||
}
|
||||
|
||||
var vec3abs = func(v) {
|
||||
return [abs(v[0]),abs(v[1]),abs(v[2])];
|
||||
return [abs(v[0]), abs(v[1]), abs(v[2])];
|
||||
}
|
||||
var vec3sign = func(v) {
|
||||
return [sign(v[0]),sign(v[1]),sign(v[2])];
|
||||
return [sign(v[0]), sign(v[1]), sign(v[2])];
|
||||
}
|
||||
var vec3step = func(edge,v) {
|
||||
return [step(edge[0],v[0]),step(edge[1],v[1]),step(edge[2],v[2])];
|
||||
var vec3step = func(edge, v) {
|
||||
return [
|
||||
step(edge[0], v[0]),
|
||||
step(edge[1], v[1]),
|
||||
step(edge[2], v[2])
|
||||
];
|
||||
}
|
||||
var vec3reflect = func(rd,n) {
|
||||
var d=vec3dot(n,rd);
|
||||
return vec3sub(rd,vec3mul(n,vec3mul([2,2,2],[d,d,d])));
|
||||
var vec3reflect = func(rd, n) {
|
||||
var d = vec3dot(n, rd);
|
||||
return vec3sub(rd, vec3mul(n, vec3mul([2, 2, 2], [d, d, d])));
|
||||
}
|
||||
|
||||
var sphere = func(ro,rd,r) {
|
||||
var b=vec3dot(ro,rd);
|
||||
var c=vec3dot(ro,ro)-r*r;
|
||||
var h=b*b-c;
|
||||
if (h<0.0) return [-1.0,-1.0];
|
||||
h=sqrt(h);
|
||||
return [-b-h,-b+h];
|
||||
var sphere = func(ro, rd, r) {
|
||||
var b = vec3dot(ro, rd);
|
||||
var c = vec3dot(ro, ro) - r * r;
|
||||
var h = b * b - c;
|
||||
if (h < 0.0)
|
||||
return [-1.0, -1.0];
|
||||
h = sqrt(h);
|
||||
return [-b - h, -b + h];
|
||||
}
|
||||
|
||||
var box = func(ro,rd,boxSize,outNormal) {
|
||||
var m=vec3div([1.0,1.0,1.0],rd);
|
||||
var n=vec3mul(m,ro);
|
||||
var k=vec3mul(vec3abs(m),boxSize);
|
||||
var t1=vec3sub(vec3neg(n),k);
|
||||
var t2=vec3add(vec3neg(n),k);
|
||||
var tN=max(max(t1[0],t1[1]),t1[2]);
|
||||
var tF=min(min(t2[0],t2[1]),t2[2]);
|
||||
if (tN>tF or tF<0.0) return [-1.0,-1.0];
|
||||
var yzx=[t1[1],t1[2],t1[0]];
|
||||
var zxy=[t1[2],t1[0],t1[1]];
|
||||
var tmp=vec3mul(vec3mul(vec3neg(vec3sign(rd)), vec3step(yzx,t1)),vec3step(zxy,t1));
|
||||
outNormal[0]=tmp[0];
|
||||
outNormal[1]=tmp[1];
|
||||
outNormal[2]=tmp[2];
|
||||
var box = func(ro, rd, boxSize, outNormal) {
|
||||
var m = vec3div([1.0, 1.0, 1.0], rd);
|
||||
var n = vec3mul(m, ro);
|
||||
var k = vec3mul(vec3abs(m), boxSize);
|
||||
var t1 = vec3sub(vec3neg(n), k);
|
||||
var t2 = vec3add(vec3neg(n), k);
|
||||
var tN = max(max(t1[0], t1[1]), t1[2]);
|
||||
var tF = min(min(t2[0], t2[1]), t2[2]);
|
||||
if (tN>tF or tF<0.0)
|
||||
return [-1.0, -1.0];
|
||||
var yzx = [t1[1], t1[2], t1[0]];
|
||||
var zxy = [t1[2], t1[0], t1[1]];
|
||||
var tmp = vec3mul(
|
||||
vec3mul(vec3neg(vec3sign(rd)), vec3step(yzx, t1)),
|
||||
vec3step(zxy, t1)
|
||||
);
|
||||
outNormal[0] = tmp[0];
|
||||
outNormal[1] = tmp[1];
|
||||
outNormal[2] = tmp[2];
|
||||
return [tN, tF];
|
||||
}
|
||||
|
||||
var plane = func(ro,rd,p,w) {
|
||||
return -(vec3dot(ro,p)+w)/vec3dot(rd,p);
|
||||
var plane = func(ro, rd, p, w) {
|
||||
return -(vec3dot(ro, p) + w) / vec3dot(rd, p);
|
||||
}
|
||||
|
||||
var main = func(frame) {
|
||||
|
||||
var height=15*2;
|
||||
var width=int(height*1/0.618)*2;
|
||||
var height = 15*2;
|
||||
var width = int(height*1/0.618)*2;
|
||||
|
||||
var aspect=width/height;
|
||||
var pixelAspect=11.0/24.0;
|
||||
var aspect = width/height;
|
||||
var pixelAspect = 11.0/24.0;
|
||||
|
||||
var gradient=split(""," .:!/r(l1Z4H9W8$");
|
||||
var gradientSize=size(gradient)-1;
|
||||
var gradient = split("", " .:!/r(l1Z4H9W8$");
|
||||
var gradientSize = size(gradient)-1;
|
||||
|
||||
var screen=[];
|
||||
setsize(screen,width*height);
|
||||
var screen = [];
|
||||
setsize(screen, width*height);
|
||||
|
||||
var light=vec3norm([-0.5,0.5,-1.0]);
|
||||
var spherePos=[0,3,0];
|
||||
var vec2_2_2=[2,2];
|
||||
var vec2_1_1=[1,1];
|
||||
var vec3_000=[0,0,0];
|
||||
var vec3_00n1=[0,0,-1];
|
||||
var vec3_111=[1,1,1];
|
||||
var light = vec3norm([-0.5, 0.5, -1.0]);
|
||||
var spherePos = [0, 3, 0];
|
||||
var vec2_2_2 = [2, 2];
|
||||
var vec2_1_1 = [1, 1];
|
||||
var vec3_000 = [0, 0, 0];
|
||||
var vec3_00n1 = [0, 0, -1];
|
||||
var vec3_111 = [1, 1, 1];
|
||||
|
||||
print("\e[2J");
|
||||
var stamp=maketimestamp();
|
||||
for(var t=0;t<frame;t+=1) {
|
||||
var stamp = maketimestamp();
|
||||
for(var t = 0; t < frame; t += 1) {
|
||||
stamp.stamp();
|
||||
for(var i=0;i<width;i+=1) {
|
||||
for(var j=0;j<height;j+=1) {
|
||||
for(var i = 0; i < width; i += 1) {
|
||||
for(var j = 0; j < height; j += 1) {
|
||||
var uv=vec2sub(vec2mul(vec2div([i,j],[width,height]),vec2_2_2),vec2_1_1);
|
||||
uv[0]*=aspect*pixelAspect;
|
||||
var ro=[-6,0,0];
|
||||
|
@ -229,22 +261,28 @@ var main = func(frame) {
|
|||
}
|
||||
}
|
||||
|
||||
var st=maketimestamp();
|
||||
var run=[0,0];
|
||||
var frame=1e3;
|
||||
if (size(runtime.argv())!=0) {
|
||||
var n=num(runtime.argv()[0]);
|
||||
var st = maketimestamp();
|
||||
var run = [0, 0];
|
||||
var frame = 1e3;
|
||||
# reset required frame if given
|
||||
if (size(runtime.argv()) != 0) {
|
||||
var n = num(runtime.argv()[0]);
|
||||
if (!math.isnan(n)) {
|
||||
frame=n;
|
||||
frame = n;
|
||||
}
|
||||
}
|
||||
st.stamp();
|
||||
main(frame);
|
||||
run[0]=st.elapsedMSec();
|
||||
use_raw();
|
||||
st.stamp();
|
||||
main(frame);
|
||||
run[1]=st.elapsedMSec();
|
||||
|
||||
println("test 0: ",run[0]/1000,"s ",frame*1000/run[0]," fps");
|
||||
println("test 1: ",run[1]/1000,"s ",frame*1000/run[1]," fps");
|
||||
st.stamp();
|
||||
main(frame);
|
||||
run[0] = st.elapsedMSec();
|
||||
|
||||
# switch used matrix library
|
||||
use_raw();
|
||||
|
||||
st.stamp();
|
||||
main(frame);
|
||||
run[1] = st.elapsedMSec();
|
||||
|
||||
println("total frame: ", frame);
|
||||
println("test [0]: ", run[0]/1000, "s with ", frame*1000/run[0], " fps");
|
||||
println("test [1]: ", run[1]/1000, "s with ", frame*1000/run[1], " fps");
|
Loading…
Reference in New Issue