summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Paul <brian.paul@tungstengraphics.com>2001-05-09 20:02:28 +0000
committerBrian Paul <brian.paul@tungstengraphics.com>2001-05-09 20:02:28 +0000
commita41edc31ce81daf69157a345525933ca6c560004 (patch)
treefedb95c9a2e9495b4767c6a3c85c41e4c6f6c821
parent61cb081a357e60e988ecfa2fd945a8d2657c49f0 (diff)
check for tiny values in dir[] vector in calcposobjs(), prevents FP underflows later
-rw-r--r--progs/demos/fire.c7
-rw-r--r--progs/demos/ipers.c7
-rw-r--r--progs/demos/ray.c7
-rw-r--r--progs/demos/terrain.c7
-rw-r--r--progs/demos/tunnel.c7
-rw-r--r--progs/demos/tunnel2.c7
6 files changed, 42 insertions, 0 deletions
diff --git a/progs/demos/fire.c b/progs/demos/fire.c
index e895b0e6a0..e4492cbc16 100644
--- a/progs/demos/fire.c
+++ b/progs/demos/fire.c
@@ -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];
diff --git a/progs/demos/ipers.c b/progs/demos/ipers.c
index d38c4d1ae8..029de00089 100644
--- a/progs/demos/ipers.c
+++ b/progs/demos/ipers.c
@@ -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];
diff --git a/progs/demos/ray.c b/progs/demos/ray.c
index aede3d8edb..44289b7f96 100644
--- a/progs/demos/ray.c
+++ b/progs/demos/ray.c
@@ -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];
diff --git a/progs/demos/terrain.c b/progs/demos/terrain.c
index 2fe1df3a07..5b5ad3e1f7 100644
--- a/progs/demos/terrain.c
+++ b/progs/demos/terrain.c
@@ -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);
diff --git a/progs/demos/tunnel.c b/progs/demos/tunnel.c
index d495b31b4f..f0faa61a0b 100644
--- a/progs/demos/tunnel.c
+++ b/progs/demos/tunnel.c
@@ -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];
diff --git a/progs/demos/tunnel2.c b/progs/demos/tunnel2.c
index 8d66248410..048cd6d8e7 100644
--- a/progs/demos/tunnel2.c
+++ b/progs/demos/tunnel2.c
@@ -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];