check for tiny values in dir[] vector in calcposobjs(), prevents FP underflows later
authorBrian Paul <brian.paul@tungstengraphics.com>
Wed, 9 May 2001 20:02:28 +0000 (20:02 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Wed, 9 May 2001 20:02:28 +0000 (20:02 +0000)
progs/demos/fire.c
progs/demos/ipers.c
progs/demos/ray.c
progs/demos/terrain.c
progs/demos/tunnel.c
progs/demos/tunnel2.c

index e895b0e6a0aff698bac38dc26629f82bb2d337c0..e4492cbc161a408051ab4909a5fbb79a1d2c4817 100644 (file)
@@ -257,6 +257,13 @@ calcposobs(void)
    dir[2] = cos(alpha * M_PI / 180.0) * sin(beta * M_PI / 180.0);
    dir[1] = cos(beta * M_PI / 180.0);
 
+   if (dir[0] < 1.0e-5 && dir[0] > -1.0e-5)
+      dir[0] = 0;
+   if (dir[1] < 1.0e-5 && dir[1] > -1.0e-5)
+      dir[1] = 0;
+   if (dir[2] < 1.0e-5 && dir[2] > -1.0e-5)
+      dir[2] = 0;
+
    obs[0] += v * dir[0];
    obs[1] += v * dir[1];
    obs[2] += v * dir[2];
index d38c4d1ae8878888afd8a9c3368b1ddd12001e4e..029de000898b5722b01a9932875b1b9e2d724be9 100644 (file)
@@ -205,6 +205,13 @@ calcposobs(void)
    dir[1] = cos(alpha * M_PI / 180.0) * sin(beta * M_PI / 180.0);
    dir[2] = cos(beta * M_PI / 180.0);
 
+   if (dir[0] < 1.0e-5 && dir[0] > -1.0e-5)
+      dir[0] = 0;
+   if (dir[1] < 1.0e-5 && dir[1] > -1.0e-5)
+      dir[1] = 0;
+   if (dir[2] < 1.0e-5 && dir[2] > -1.0e-5)
+      dir[2] = 0;
+
    obs[0] += v * dir[0];
    obs[1] += v * dir[1];
    obs[2] += v * dir[2];
index aede3d8edbd515f1871e80eab6ab861196bd7e88..44289b7f96551a137936a91d0d03c3e2e8ab87f4 100644 (file)
@@ -102,6 +102,13 @@ calcposobs(void)
    dir[1] = cos(alpha * M_PI / 180.0) * sin(beta * M_PI / 180.0);
    dir[2] = cos(beta * M_PI / 180.0);
 
+   if (dir[0] < 1.0e-5 && dir[0] > -1.0e-5)
+      dir[0] = 0;
+   if (dir[1] < 1.0e-5 && dir[1] > -1.0e-5)
+      dir[1] = 0;
+   if (dir[2] < 1.0e-5 && dir[2] > -1.0e-5)
+      dir[2] = 0;
+
    obs[0] += v * dir[0];
    obs[1] += v * dir[1];
    obs[2] += v * dir[2];
index 2fe1df3a0714da1d6cbc12cdf4caecb56a1b8e50..5b5ad3e1f7a731cee75e3ee9eaba076a7e290791 100644 (file)
@@ -81,6 +81,13 @@ calcposobs(void)
    dir[2] = cos(alpha * M_PI / 180.0) * sin(beta * M_PI / 180.0);
    dir[1] = cos(beta * M_PI / 180.0);
 
+   if (dir[0] < 1.0e-5 && dir[0] > -1.0e-5)
+      dir[0] = 0;
+   if (dir[1] < 1.0e-5 && dir[1] > -1.0e-5)
+      dir[1] = 0;
+   if (dir[2] < 1.0e-5 && dir[2] > -1.0e-5)
+      dir[2] = 0;
+
    alpha1 = alpha + FOV / 2.0;
    v1[0] = sin(alpha1 * M_PI / 180.0);
    v1[1] = cos(alpha1 * M_PI / 180.0);
index d495b31b4f67183518bf3e8fe49b01d0dad512be..f0faa61a0bfb7573e4aa1681b33e4c113d9428b6 100644 (file)
@@ -164,6 +164,13 @@ calcposobs(void)
    dir[1] = cos(alpha * M_PI / 180.0) * sin(beta * M_PI / 180.0);
    dir[2] = cos(beta * M_PI / 180.0);
 
+   if (dir[0] < 1.0e-5 && dir[0] > -1.0e-5)
+      dir[0] = 0;
+   if (dir[1] < 1.0e-5 && dir[1] > -1.0e-5)
+      dir[1] = 0;
+   if (dir[2] < 1.0e-5 && dir[2] > -1.0e-5)
+      dir[2] = 0;
+
    obs[0] += v * dir[0];
    obs[1] += v * dir[1];
    obs[2] += v * dir[2];
index 8d662484109f5a4d87f68b11b5ff454ea1339aa4..048cd6d8e7c53893b74cda10fdb832adf150f35a 100644 (file)
@@ -162,6 +162,13 @@ calcposobs(void)
    dir[1] = cos(alpha * M_PI / 180.0) * sin(beta * M_PI / 180.0);
    dir[2] = cos(beta * M_PI / 180.0);
 
+   if (dir[0] < 1.0e-5 && dir[0] > -1.0e-5)
+      dir[0] = 0;
+   if (dir[1] < 1.0e-5 && dir[1] > -1.0e-5)
+      dir[1] = 0;
+   if (dir[2] < 1.0e-5 && dir[2] > -1.0e-5)
+      dir[2] = 0;
+
    obs[0] += v * dir[0];
    obs[1] += v * dir[1];
    obs[2] += v * dir[2];