First of all, please forgive me, as my C++ is really quite rusty. It's been... seven years or so since I've really had to use it.

I"m in the process of converting some C++ code to C# (in particular some code for checking an axis-aligned bounding box against a triangle, in 3D). The original source in question can be found here.

The particular portion that I'm having a bit of trouble is this:

#define AXISTEST_X01(a, b, fa, fb) \ p0 = a*v0[Y] - b*v0[Z]; \ p2 = a*v2[Y] - b*v2[Z]; \ if(p0<p2) {min=p0; max=p2;} else {min=p2; max=p0;} \ rad = fa * boxhalfsize[Y] + fb * boxhalfsize[Z]; \ if(min>rad || max<-rad) return 0;

Now from what I remember, I thought C++ macros were basically pre-processor bits that get substituted in at compile time. The thing I'm perplexed at is the return statement in the macro. In this case, what happens if min < rad? Does the statement still return any sort of value, or is there some sort of default return value on a macro that I'm not aware of?

Here's what the rough C# equivalent is, as far as I have been able to figure:

//Assume variables are declared/initialized properly. Unlike what I've done here... float p0; float p2; Vector3 v0; Vector3 v1; Vector3 v2; Vector3 boxHalfSize; float min; float max; private int AXISTEST_X01(float a, float b, float fa, float fb) { p0 = a * v0.Y - b * v0.Z; p2 = a * v2.Y - b * v2.Z; if (p0 > p2) { min = p0; max = p2; } else { min = p2; max = p2; } float rad = fa * boxHalfSize.Y + fb * boxHalfSize.Z; if (min > rad || max < -rad) { return 0; } //Otherwise... return something else? return 0; }

Any thoughts/ideas on how it should actually look? I can't say I've ever dealt much with macros, and this one has me a bit stumped.