From c7bd37c114bf9a411e339ab49cd8985c108a1396 Mon Sep 17 00:00:00 2001 From: Carlos Sanchez Date: Tue, 23 Jul 2024 18:28:08 -0400 Subject: [PATCH] More stuff --- business-rt.cpp | 133 +++++++++++++++++++++++++++++++++++++++--------- go2/.gitignore | 2 + go2/go.mod | 5 ++ go2/go.sum | 2 + go2/main.go | 58 +++++++++++++++++++++ paulheck.cpp | 79 ++++++++++++++++++++++++++++ 6 files changed, 256 insertions(+), 23 deletions(-) create mode 100644 go2/.gitignore create mode 100644 go2/go.mod create mode 100644 go2/go.sum create mode 100644 go2/main.go create mode 100644 paulheck.cpp diff --git a/business-rt.cpp b/business-rt.cpp index c9fc6b1..4c0ac86 100644 --- a/business-rt.cpp +++ b/business-rt.cpp @@ -1,23 +1,110 @@ - #include - #include - #include - #define h return - #define F printf - #define S struct - typedef float d;typedef int i;d H=1003;d w(){h drand48();}S v{d x,y,z;v(d a=0,d b=0,d - c=0){x=a;y=b;z=c;}v a(v b){h v(x+b.x,y+b.y,z+b.z);}v c(v b){h v(x*b.x,y*b.y,z*b.z);}d - e(v b){h x*b.x+y*b.y+z*b.z;}v f(d b){h v(x*b,y*b,z*b);}v n(d s=1){h f(s/sqrt(x*x+y*y+ - z*z));}v p(v a){h v(y*a.z-z*a.y,z*a.x-x*a.z,x*a.y-y*a.x);}};S r{v o,a;r(v j,v k){o=j; - a=k;}v p(d t){h a.f(t).a(o);}};S s{v p;d l;i C(r q,d&t){v o=q.o.f(-1).a(p);d b=q.a.e( - o);d c=o.e(o)-l;c=b*b-c;if(c<0)h 0;c=sqrt(c);d v=b-c;if(v>0&&v1?1:c,.45)*255+.5;}r C(d x,d y){v e=v(x,-y,1).n(4);d a=6*w(),c=.2 - *sqrt(w());d b=sin(a)*c;a=cos(a)*c;e.x-=a;e.y-=b;h r(v(a,b),e.n());}s u[10] ={{v(0,-2 - ,5),1},{v(0,-H),1e6},{v(0,H),1e6},{v(H),1e6},{v(-H),1e6},{v(0,0,-H),1e6},{v(0,0,H+3), - 1e6},{v(-2,-2,4),2},{v(2,-3,4),1},{v(2,-1,4),1}}; i p(r a,d&t){i n=-1;for(i m=0;m<10; - m++){if(u[m].C(a,t))n=m;}h n;}v e(r a,d b){d t=1e6;i o=p(a,t);if(b>5||o<0)h v();if(!o - )h v(.9,.5,.1);v P=a.p(t);v V=u[o].p.f(-1).a(P).n();if(o>7){a=r(P,a.a.a(V.f(-2*V.e(a. - a))));h e(a,++b).f((o-6.5)/2);}d O=6*w();d A=sqrt(w());v U=a.a.f(-1).p(V).n();v T=U.p - (V);a=r(P,T.f(cos(O)*A).a(U.f(sin(O)*A)).a(V.f(sqrt(1-A*A))).n());v j(1,1,1);if(o==3) - j.x=j.z=0;if(o==4)j.y=j.z=0;h e(a,++b).c(v(j));}i main(){F("P3\n512 512\n255\n");for( - i m=0;m<512;m++)for(i n=0;n<512;n++){v q;for(i k=0;k<100;k++){r j=C(n/256.0-1,m/256.0 - -1);q=q.a(e(j,0).f(0.02));}F("%d %d %d ",g(q.x),g(q.y),g(q.z));}} +#include +#include +#include +#define h return +#define F printf +#define S struct +typedef float d; +typedef int i; +d H = 1003; +d w() { h drand48(); } +S v { + d x, y, z; + v(d a = 0, d b = 0, d c = 0) { + x = a; + y = b; + z = c; + } + v a(v b) { h v(x + b.x, y + b.y, z + b.z); } + v c(v b) { h v(x * b.x, y * b.y, z * b.z); } + d e(v b) { h x *b.x + y *b.y + z *b.z; } + v f(d b) { h v(x * b, y * b, z * b); } + v n(d s = 1) { h f(s / sqrt(x * x + y * y + z * z)); } + v p(v a) { h v(y * a.z - z * a.y, z * a.x - x * a.z, x * a.y - y * a.x); } +}; +S r { + v o, a; + r(v j, v k) { + o = j; + a = k; + } + v p(d t) { h a.f(t).a(o); } +}; +S s { + v p; + d l; + i C(r q, d & t) { + v o = q.o.f(-1).a(p); + d b = q.a.e(o); + d c = o.e(o) - l; + c = b * b - c; + if (c < 0) + h 0; + c = sqrt(c); + d v = b - c; + if (v > 0 && v < t) { + t = v; + h 1; + } + h 0; + } +}; +i g(d c) { h pow(c < 0 ? 0 : c > 1 ? 1 : c, .45) * 255 + .5; } +r C(d x, d y) { + v e = v(x, -y, 1).n(4); + d a = 6 * w(), c = .2 * sqrt(w()); + d b = sin(a) * c; + a = cos(a) * c; + e.x -= a; + e.y -= b; + h r(v(a, b), e.n()); +} +s u[10] = {{v(0, -2, 5), 1}, {v(0, -H), 1e6}, {v(0, H), 1e6}, + {v(H), 1e6}, {v(-H), 1e6}, {v(0, 0, -H), 1e6}, + {v(0, 0, H + 3), 1e6}, {v(-2, -2, 4), 2}, {v(2, -3, 4), 1}, + {v(2, -1, 4), 1}}; +i p(r a, d &t) { + i n = -1; + for (i m = 0; m < 10; m++) { + if (u[m].C(a, t)) + n = m; + } + h n; +} +v e(r a, d b) { + d t = 1e6; + i o = p(a, t); + if (b > 5 || o < 0) + h v(); + if (!o) + h v(.9, .5, .1); + v P = a.p(t); + v V = u[o].p.f(-1).a(P).n(); + if (o > 7) { + a = r(P, a.a.a(V.f(-2 * V.e(a.a)))); + h e(a, ++b).f((o - 6.5) / 2); + } + d O = 6 * w(); + d A = sqrt(w()); + v U = a.a.f(-1).p(V).n(); + v T = U.p(V); + a = r(P, T.f(cos(O) * A).a(U.f(sin(O) * A)).a(V.f(sqrt(1 - A * A))).n()); + v j(1, 1, 1); + if (o == 3) + j.x = j.z = 0; + if (o == 4) + j.y = j.z = 0; + h e(a, ++b).c(v(j)); +} +i main() { + F("P3\n512 512\n255\n"); + for (i m = 0; m < 512; m++) + for (i n = 0; n < 512; n++) { + v q; + for (i k = 0; k < 100; k++) { + r j = C(n / 256.0 - 1, m / 256.0 - 1); + q = q.a(e(j, 0).f(0.02)); + } + F("%d %d %d ", g(q.x), g(q.y), g(q.z)); + } +} diff --git a/go2/.gitignore b/go2/.gitignore new file mode 100644 index 0000000..6c91443 --- /dev/null +++ b/go2/.gitignore @@ -0,0 +1,2 @@ +go1 +go2 diff --git a/go2/go.mod b/go2/go.mod new file mode 100644 index 0000000..fb793e3 --- /dev/null +++ b/go2/go.mod @@ -0,0 +1,5 @@ +module 3dtrial/go2 + +go 1.22.5 + +require github.com/ungerik/go3d v0.0.0-20240502073936-1137f6adf7e9 diff --git a/go2/go.sum b/go2/go.sum new file mode 100644 index 0000000..daad004 --- /dev/null +++ b/go2/go.sum @@ -0,0 +1,2 @@ +github.com/ungerik/go3d v0.0.0-20240502073936-1137f6adf7e9 h1:wMWP16Ijw+W+IXGcAzrwQDua1NBB4tP8iWECpg5DVRQ= +github.com/ungerik/go3d v0.0.0-20240502073936-1137f6adf7e9/go.mod h1:ipEjrk2uLK4xX8ivWBPIVOD0fMtKyPI0strluUfIlYQ= diff --git a/go2/main.go b/go2/main.go new file mode 100644 index 0000000..3c9a6b5 --- /dev/null +++ b/go2/main.go @@ -0,0 +1,58 @@ +package main + +import ( + "fmt" + "github.com/ungerik/go3d/vec3" + "log" + "strings" + "time" +) + +// Clamp a float value to the given range +func fclamp(val float32, minval int, maxval int) int { + return max(minval, min(maxval, int(val))) +} + +func main() { + log.Printf("Program begin") + const ( + width = 1024 + height = 768 + colmax = 255 + ) + framebuffer := make([]vec3.T, width*height) + + now := time.Now() + for y := range height { + for x := range width { + framebuffer[x+y*width] = vec3.T{ + float32(y) / float32(height), + float32(x) / float32(width), + 0, + } + } + } + log.Printf("Generate frame took %dms", time.Since(now).Milliseconds()) + + fmt.Printf("P3\n%d %d\n%d\n# Image contents\n", width, height, colmax) + + var buffer strings.Builder + now = time.Now() + + for i := range height * width { + fb := framebuffer[i] + buffer.WriteString(fmt.Sprintf("%d %d %d\t", + fclamp(colmax*fb[0], 0, colmax), + fclamp(colmax*fb[1], 0, colmax), + fclamp(colmax*fb[2], 0, colmax), + )) + if i&63 == 63 { + buffer.WriteRune('\n') + } + } + + log.Printf("Conversion took %dms", time.Since(now).Milliseconds()) + + fmt.Printf(buffer.String()) + fmt.Printf("\n# Image end\n") +} diff --git a/paulheck.cpp b/paulheck.cpp new file mode 100644 index 0000000..982e02d --- /dev/null +++ b/paulheck.cpp @@ -0,0 +1,79 @@ +// minray > minray.ppm +#include +#include +#include +typedef int i; +typedef float f; +struct v { + f x, y, z; + v operator+(v r) { return v(x + r.x, y + r.y, z + r.z); } + v operator*(f r) { return v(x * r, y * r, z * r); } + f operator%(v r) { return x * r.x + y * r.y + z * r.z; } + v() {} + v operator^(v r) { + return v(y * r.z - z * r.y, z * r.x - x * r.z, x * r.y - y * r.x); + } + v(f a, f b, f c) { + x = a; + y = b; + z = c; + } + v operator!() { return *this * (1 / sqrt(*this % *this)); } +}; +i G[] = {247570, 280596, 280600, 249748, 18578, 18577, 231184, 16, 16}; +f R() { return (f)rand() / RAND_MAX; } +i T(v o, v d, f &t, v &n) { + t = 1e9; + i m = 0; + f p = -o.z / d.z; + if (.01 < p) + t = p, n = v(0, 0, 1), m = 1; + for (i k = 19; k--;) + for (i j = 9; j--;) + if (G[j] & 1 << k) { + v p = o + v(-k, 0, -j - 4); + f b = p % d, c = p % p - 1, q = b * b - c; + if (q > 0) { + f s = -b - sqrt(q); + if (s < t && s > .01) + t = s, n = !(p + d * t), m = 2; + } + } + return m; +} +v S(v o, v d) { + f t; + v n; + i m = T(o, d, t, n); + if (!m) + return v(.7, .6, 1) * pow(1 - d.z, 4); + v h = o + d * t, l = !(v(9 + R(), 9 + R(), 16) + h * -1), + r = d + n * (n % d * -2); + f b = l % n; + if (b < 0 || T(h, l, t, n)) + b = 0; + f p = pow(l % r * (b > 0), 99); + if (m & 1) { + h = h * .2; + return ((i)(ceil(h.x) + ceil(h.y)) & 1 ? v(3, 1, 1) : v(3, 3, 3)) * + (b * .2 + .1); + } + return v(p, p, p) + S(h, r) * .5; +} +i main() { + printf("P6 512 512 255 "); + v g = !v(-6, -16, 0), a = !(v(0, 0, 1) ^ g) * .002, b = !(g ^ a) * .002, + c = (a + b) * -256 + g; + for (i y = 512; y--;) + for (i x = 512; x--;) { + v p(13, 13, 13); + for (i r = 64; r--;) { + v t = a * (R() - .5) * 99 + b * (R() - .5) * 99; + p = S(v(17, 16, 8) + t, + !(t * -1 + (a * (R() + x) + b * (y + R()) + c) * 16)) * + 3.5 + + p; + } + printf("%c%c%c", (i)p.x, (i)p.y, (i)p.z); + } +}