diff options
author | Anthony LaTorre <telatorre@gmail.com> | 2011-05-09 14:51:42 -0400 |
---|---|---|
committer | Anthony LaTorre <telatorre@gmail.com> | 2011-05-09 14:51:42 -0400 |
commit | 34c57af59b8baac89b9fdc0b5ac964a4c67bd32d (patch) | |
tree | e4cc55289e3f3f4d1e9208e18f006b72cbd8c598 /src | |
parent | aa1a149dab6c8e3d3a89488b26c3647f61d91778 (diff) | |
download | chroma-34c57af59b8baac89b9fdc0b5ac964a4c67bd32d.tar.gz chroma-34c57af59b8baac89b9fdc0b5ac964a4c67bd32d.tar.bz2 chroma-34c57af59b8baac89b9fdc0b5ac964a4c67bd32d.zip |
pull triangle vertices in kernel function
Diffstat (limited to 'src')
-rw-r--r-- | src/intersect.cu | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/src/intersect.cu b/src/intersect.cu index f3c5657..0bb73a0 100644 --- a/src/intersect.cu +++ b/src/intersect.cu @@ -1,11 +1,7 @@ //-*-c-*- -__device__ bool intersect_triangle(const float3 &x, const float3 &p, float3 *triangle, float3 &intersection) +__device__ bool intersect_triangle(const float3 &x, const float3 &p, const float3 &v0, const float3 &v1, const float3 &v2, float3 &intersection) { - float3 v0 = triangle[0]; - float3 v1 = triangle[1]; - float3 v2 = triangle[2]; - Matrix m = make_matrix(v1-v0, v2-v0, -p); float determinant = det(m); @@ -35,12 +31,9 @@ __device__ bool intersect_triangle(const float3 &x, const float3 &p, float3 *tri return true; } -__device__ int get_color(const float3 &p, float3 *vertex) +__device__ int get_color(const float3 &p, const float3 &v0, const float3& v1, const float3 &v2) { - float3 v1 = vertex[1] - vertex[0]; - float3 v2 = vertex[2] - vertex[0]; - - float3 normal = cross(v1,v2); + float3 normal = cross(v1-v0,v2-v0); float scale; scale = dot(normal,-p)/(norm(normal)*norm(p)); @@ -94,11 +87,15 @@ __global__ void intersect_triangle_mesh(int max_idx, float3 *xarr, float3 *parr, int i; for (i=0; i < n; i++) { - if (intersect_triangle(x, p, mesh+3*i, intersection)) + float3 v0 = *(mesh+3*i); + float3 v1 = *(mesh+3*i+1); + float3 v2 = *(mesh+3*i+2); + + if (intersect_triangle(x, p, v0, v1, v2, intersection)) { if (!hit) { - *pixel = get_color(p, mesh+3*i); + *pixel = get_color(p, v0, v1, v2); min_distance = norm(intersection-x); min_intersection = intersection; @@ -110,7 +107,7 @@ __global__ void intersect_triangle_mesh(int max_idx, float3 *xarr, float3 *parr, if (distance < min_distance) { - *pixel = get_color(p, mesh+3*i); + *pixel = get_color(p, v0, v1, v2); min_distance = distance; min_intersection = intersection; |