More stuff

This commit is contained in:
Carlos Sanchez 2024-07-23 18:28:08 -04:00
parent f18eb93c32
commit c7bd37c114
6 changed files with 256 additions and 23 deletions

View File

@ -4,20 +4,107 @@
#define h return #define h return
#define F printf #define F printf
#define S struct #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 typedef float 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 typedef int i;
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+ d H = 1003;
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; d w() { h drand48(); }
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( S v {
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 x, y, z;
(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 v(d a = 0, d b = 0, d c = 0) {
*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 x = a;
,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), y = b;
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; z = c;
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. v a(v b) { h v(x + b.x, y + b.y, z + b.z); }
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 c(v b) { h v(x * b.x, y * b.y, z * b.z); }
(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) d e(v b) { h x *b.x + y *b.y + z *b.z; }
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( v f(d b) { h v(x * b, y * b, z * b); }
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 v n(d s = 1) { h f(s / sqrt(x * x + y * y + z * z)); }
-1);q=q.a(e(j,0).f(0.02));}F("%d %d %d ",g(q.x),g(q.y),g(q.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));
}
}

2
go2/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
go1
go2

5
go2/go.mod Normal file
View File

@ -0,0 +1,5 @@
module 3dtrial/go2
go 1.22.5
require github.com/ungerik/go3d v0.0.0-20240502073936-1137f6adf7e9

2
go2/go.sum Normal file
View File

@ -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=

58
go2/main.go Normal file
View File

@ -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")
}

79
paulheck.cpp Normal file
View File

@ -0,0 +1,79 @@
// minray > minray.ppm
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
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);
}
}