Hey, this topic could have been made under Programming, but I decided that this is more math centered.

Ok, I'm writing my own raytracer and it's basically finished. It's ~300 lines of C code. As you may guess/know, the most important step is to calculate the intersections with the ray and object(in this situation, cube).

The way I solved this now, is the most robust way:

1. I have calculated the vector(vec.x, vec.y, vec.z), I have the starting point(ray.x, ray.y, ray.z).

2. Add unit vector to current location and loop through every object to see if it is currently in the boundries of any cube(repeat #2 for x times):

SIZE is handeled by the C preprocessor and is replaced by an integer, let's say '40' in my case. This is in units.

It checks if all three coordinates are currently all within a single object and then returns the number of the object it hit, else it returns '-1'. This is rather impractical, but that's why I'm here, asking for your help :)

Code:

int collide(double ray.x, double ray.y, double ray.z)
{
int i;
for (i = 0; i < num_of_obj; i++)
{
if (ray.x >= objects[i][0] && ray.x <= objects[i][0]+SIZE)
{
if (ray.y >= objects[i][1] && ray.y <= objects[i][1]+SIZE)
{
if (ray.z >= objects[i][2] && ray.z <= objects[i][2]+SIZE)
{
return (i);
}
}
}
}
return(-1);
}

I read from an online tutorial, that the best way would be to use polynomial functions to detect the intersection.

The biggest negative side of my current solution is the inaccuracy: let's say the ray is very near to a corner of a cube, the ray might "jump" through the corner, if the vector is a bit too large.

Can anyone help me to figure out a (polynomial)function to get an intersection point? I guess the needed inputs would be:

*(vec.x, vec.y, vec.z) - current (unit)vector

*(ray.x, ray.y, ray.z) - current location of ray

and

*the locations of cubes are global variables, so they don't need to be an input, they could be accessed from objects[o][0..3].

*Size is also available as global.

I would be

__very grateful__ to anyone who feels like helping me out :)

PS! I have tried using google for this, but failed to get a straightforward answer :(