Add the hit function to get the closest non negative hit, and add some mecanisme to test that properly and report when no valid hit occur.
This commit is contained in:
@@ -7,9 +7,11 @@
|
||||
*
|
||||
*/
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <math_helper.h>
|
||||
#include <intersect.h>
|
||||
|
||||
#include <float.h>
|
||||
|
||||
#define MIN_ALLOC (2)
|
||||
|
||||
Intersect::Intersect()
|
||||
@@ -27,4 +29,26 @@ void Intersect::add(Intersection i)
|
||||
this->list = (Intersection *)realloc(this->list, sizeof(Object *) * this->allocated);
|
||||
}
|
||||
this->list[this->num++] = i;
|
||||
}
|
||||
|
||||
Intersection Intersect::hit()
|
||||
{
|
||||
int i;
|
||||
double minHit = DBL_MAX;
|
||||
uint32_t curHit = -1;
|
||||
for(i = 0; i < this->num; i++)
|
||||
{
|
||||
if ((this->list[i].t >= 0) && (this->list[i].t < minHit))
|
||||
{
|
||||
curHit = i;
|
||||
minHit = this->list[i].t;
|
||||
}
|
||||
}
|
||||
|
||||
if (curHit == -1)
|
||||
{
|
||||
return Intersection(0, nullptr);
|
||||
}
|
||||
|
||||
return this->list[curHit];
|
||||
}
|
||||
Reference in New Issue
Block a user