From eddb2d366ba452ff2993aa4c827150767a1fcc59 Mon Sep 17 00:00:00 2001 From: rodri Date: Sat, 13 Jul 2024 20:51:42 +0000 Subject: use the new camera interface. solar got faster with backface culling. --- vis.c | 56 +++++++++++++++++++++++++++++--------------------------- 1 file changed, 29 insertions(+), 27 deletions(-) (limited to 'vis.c') diff --git a/vis.c b/vis.c index c9aca97..ccbeb26 100644 --- a/vis.c +++ b/vis.c @@ -60,7 +60,7 @@ Scene *scene; Mouse om; Quaternion orient = {1,0,0,0}; -Camera cams[4], *maincam; +Camera *cams[4], *maincam; Camcfg camcfgs[4] = { 2,0,-4,1, 0,0,0,1, @@ -467,9 +467,14 @@ zoomout(void) void drawstats(void) { - int i; + int i, camno; + + camno = -1; + for(i = 0; i < nelem(cams); i++) + if(maincam == cams[i]) + camno = i+1; - snprint(stats[Scamno], sizeof(stats[Scamno]), "CAM %lld", maincam-cams+1); + snprint(stats[Scamno], sizeof(stats[Scamno]), "CAM %d", camno); snprint(stats[Sfov], sizeof(stats[Sfov]), "FOV %g°", maincam->fov/DEG); snprint(stats[Scampos], sizeof(stats[Scampos]), "%V", maincam->p); snprint(stats[Scambx], sizeof(stats[Scambx]), "bx %V", maincam->bx); @@ -682,7 +687,7 @@ rmb(void) if(idx >= 0){ shader = &shadertab[idx]; for(idx = 0; idx < nelem(cams); idx++) - memset(&cams[idx].stats, 0, sizeof(cams[idx].stats)); + memset(&cams[idx]->stats, 0, sizeof(cams[idx]->stats)); } unlockdisplay(display); nbsend(drawc, nil); @@ -768,41 +773,41 @@ handlekeys(void) static int okdown; if(kdown & 1<p, mulpt3(maincam->bz, 0.1)), maincam->bz, maincam->by); + movecamera(maincam, mulpt3(maincam->bz, -0.1)); if(kdown & 1<p, mulpt3(maincam->bz, 0.1)), maincam->bz, maincam->by); + movecamera(maincam, mulpt3(maincam->bz, 0.1)); if(kdown & 1<p, mulpt3(maincam->bx, 0.1)), maincam->bz, maincam->by); + movecamera(maincam, mulpt3(maincam->bx, -0.1)); if(kdown & 1<p, mulpt3(maincam->bx, 0.1)), maincam->bz, maincam->by); + movecamera(maincam, mulpt3(maincam->bx, 0.1)); if(kdown & 1<p, mulpt3(maincam->by, 0.1)), maincam->bz, maincam->by); + movecamera(maincam, mulpt3(maincam->by, 0.1)); if(kdown & 1<p, mulpt3(maincam->by, 0.1)), maincam->bz, maincam->by); + movecamera(maincam, mulpt3(maincam->by, -0.1)); if(kdown & 1<bz, maincam->bx, 1*DEG)); + rotatecamera(maincam, maincam->bx, 1*DEG); if(kdown & 1<bz, maincam->bx, -1*DEG)); + rotatecamera(maincam, maincam->bx, -1*DEG); if(kdown & 1<bz, maincam->by, 1*DEG)); + rotatecamera(maincam, maincam->by, 1*DEG); if(kdown & 1<bz, maincam->by, -1*DEG)); + rotatecamera(maincam, maincam->by, -1*DEG); if(kdown & 1<p, maincam->bz, qrotate(maincam->by, maincam->bz, 1*DEG)); + rotatecamera(maincam, maincam->bz, 1*DEG); if(kdown & 1<p, maincam->bz, qrotate(maincam->by, maincam->bz, -1*DEG)); + rotatecamera(maincam, maincam->bz, -1*DEG); if(kdown & 1<r, screen->r.min), XRGB32, 0, DNofill); for(i = 0; i < nelem(cams); i++){ - v = mkviewport(screenb->r); - placecamera(&cams[i], camcfgs[i].p, camcfgs[i].lookat, camcfgs[i].up); - configcamera(&cams[i], v, camcfgs[i].fov, camcfgs[i].clipn, camcfgs[i].clipf, camcfgs[i].ptype); - cams[i].scene = scene; - cams[i].rctl = rctl; + cams[i] = Cam(screenb->r, rctl, + camcfgs[i].ptype, camcfgs[i].fov, camcfgs[i].clipn, camcfgs[i].clipf); + placecamera(cams[i], scene, camcfgs[i].p, camcfgs[i].lookat, camcfgs[i].up); } - maincam = &cams[3]; + maincam = cams[3]; light.p = Pt3(0,100,100,1); // light.dir = Vec3(0,-1,0); light.c = Pt3(1,1,1,1); -- cgit v1.2.3