31 lines
807 B
C++
31 lines
807 B
C++
#include "first_hit.h"
|
|
|
|
bool first_hit(
|
|
const Ray &ray,
|
|
const double min_t,
|
|
const std::vector<std::shared_ptr<Object> > &objects,
|
|
int &hit_id,
|
|
double &t,
|
|
Eigen::Vector3d &n) {
|
|
double t_temp;
|
|
Eigen::Vector3d n_temp;
|
|
|
|
bool hit = false;
|
|
/* Initialize to a value that will never be used. */
|
|
t = -1;
|
|
/* Alternatively, use a max integer value, and remove the check t == -1. */
|
|
|
|
/* Store intermediate results that are not necessarily the first hit. */
|
|
for (int i = 0; i < objects.size(); ++i) {
|
|
if (objects[i]->intersect(ray, min_t, t_temp, n_temp)) {
|
|
hit = true;
|
|
if (t == -1 || t_temp < t) {
|
|
hit_id = i;
|
|
t = t_temp;
|
|
n = n_temp;
|
|
}
|
|
}
|
|
}
|
|
|
|
return hit;
|
|
}
|