diff options
-rw-r--r-- | graphics.h | 8 | ||||
-rw-r--r-- | render.c | 12 | ||||
-rw-r--r-- | util.c | 15 |
3 files changed, 26 insertions, 9 deletions
@@ -233,9 +233,9 @@ struct SUparams struct Shadertab { char *name; - Point3 (*vshader)(Shaderparams*); /* vertex shader */ - Color (*fshader)(Shaderparams*); /* fragment shader */ - Vertexattrs; /* uniforms */ + Point3 (*vs)(Shaderparams*); /* vertex shader */ + Color (*fs)(Shaderparams*); /* fragment shader */ + Vertexattrs; /* uniforms */ }; struct Rendertime @@ -446,6 +446,8 @@ Point3 modulapt3(Point3, Point3); Point3 minpt3(Point3, Point3); Point3 maxpt3(Point3, Point3); int eqpt3(Point3, Point3); +Quaternion qsandwich(Quaternion, Quaternion); +Point3 qsandwichpt3(Quaternion, Point3); Memimage *rgba(ulong); Memimage *dupmemimage(Memimage*); @@ -207,7 +207,7 @@ rasterize(Rastertask *task) fsp.v = &prim->v[0]; fsp.p = p; - c = params->stab->fshader(&fsp); + c = params->stab->fs(&fsp); if(c.a == 0) /* discard non-colors */ break; if(ropts & RODepth) @@ -273,7 +273,7 @@ rasterize(Rastertask *task) lerpvertex(fsp.v, &prim->v[0], &prim->v[1], perc); fsp.p = p; - c = params->stab->fshader(&fsp); + c = params->stab->fs(&fsp); if(c.a == 0) /* discard non-colors */ goto discard; if(ropts & RODepth) @@ -327,7 +327,7 @@ discard: berpvertex(fsp.v, &prim->v[0], &prim->v[1], &prim->v[2], bc); fsp.p = p; - c = params->stab->fshader(&fsp); + c = params->stab->fs(&fsp); if(c.a == 0) /* discard non-colors */ continue; if(ropts & RODepth) @@ -482,7 +482,7 @@ tiler(void *arg) vsp.v = &p->v[0]; vsp.idx = 0; - p->v[0].p = params->stab->vshader(&vsp); + p->v[0].p = params->stab->vs(&vsp); if(!isvisible(p->v[0].p)) break; @@ -517,7 +517,7 @@ tiler(void *arg) vsp.v = &p->v[i]; vsp.idx = i; - p->v[i].p = params->stab->vshader(&vsp); + p->v[i].p = params->stab->vs(&vsp); } if(!isvisible(p->v[0].p) || !isvisible(p->v[1].p)){ @@ -563,7 +563,7 @@ tiler(void *arg) vsp.v = &p->v[i]; vsp.idx = i; - p->v[i].p = params->stab->vshader(&vsp); + p->v[i].p = params->stab->vs(&vsp); } if(!isvisible(p->v[0].p) || !isvisible(p->v[1].p) || !isvisible(p->v[2].p)){ @@ -91,6 +91,21 @@ eqpt3(Point3 a, Point3 b) return vec3len(subpt3(a, b)) < ε2; } +Quaternion +qsandwich(Quaternion q, Quaternion p) +{ + return mulq(mulq(q, p), invq(q)); +} + +Point3 +qsandwichpt3(Quaternion q, Point3 p) +{ + Quaternion r; + + r = qsandwich(q, Quatvec(0, p)); + return Pt3(r.i, r.j, r.k, p.w); +} + void memsetf(void *dp, float v, usize len) { |