diff options
author | Martin Stensgård <mastensg@ping.uio.no> | 2010-10-20 00:45:59 +0200 |
---|---|---|
committer | Martin Stensgård <mastensg@ping.uio.no> | 2010-10-20 00:45:59 +0200 |
commit | da0c8c681e9d894d91c405310b8810393277f13c (patch) | |
tree | 8dab8dcf098ef972956dfdbc04f765dc597f3a4a /3dmath.c | |
parent | 7e071db6bee659dbd2b4261830f4e2f10bc8ba33 (diff) |
Works.
Diffstat (limited to '3dmath.c')
-rw-r--r-- | 3dmath.c | 21 |
1 files changed, 16 insertions, 5 deletions
@@ -19,18 +19,29 @@ normalize(float x[3]) { } float -sphere_intersect(float s[3], float d[3], float c[3], float r) { +sphere_intersect(float y[3], float r[3], float s[3], float d[3], float c[3], float R) { int i; - float D; - float v[3]; + float D, n[3], t, v[3]; for(i = 0; i < 3; ++i) v[i] = s[i] - c[i]; - D = POW2(dot(v, d)) - 4 * (dot(v, v) - POW2(r)); + D = POW2(dot(v, d)) - (dot(v, v) - POW2(R)); if(D < 0) return -1; - return 1; + t = -dot(v, d) - D; + + for(i = 0; i < 3; ++i) { + y[i] = s[i] + t * d[i]; + n[i] = y[i] - c[i]; + } + + normalize(n); + + for(i = 0; i < 3; ++i) + r[i] = d[i] - 2 * dot(n, d) * n[i]; + + return t; } |