void gouraud_shade(Hpoly *c, Hpoly *p, Hpoly *n, Vector3 v, RContext *rc, Material *m) { int i; for (i = 0; i < p->n; i++) c->v[i] = v4_v3conv((*m->luminance)(rc_set(rc, v3_unit(v3_sub(v, v3_v4conv(p->v[i]))), v3_v4conv(p->v[i]), v3_v4conv(n->v[i]), m))); }
Hpoly *hpoly_polyxform(Hpoly *d, Poly *s, Matrix4 m) { int i; for (i = 0; i < d->n; i++) { d->v[i] = v4_m4mult(v4_v3conv(s->v[i]), m); d->v[i].x /= d->v[i].w; d->v[i].y /= d->v[i].w; d->v[i].z /= d->v[i].w; } return d; }