Обратный почтовый ящик в raytracing

Я работаю над трассировкой лучей с обратным почтовым ящиком, что означает, что для каждого луча я помню последние 8 идентификаторов треугольников, которые я пересек. Если треугольник идентификатора находится в почтовом ящике, и если я снова получу тот же идентификатор, больше вычислений пересечения не делается. Это уменьшает количество вычислений пересечений, но время вычислений хуже.

Есть часть моего кода … Есть идеи, чтобы ускорить это? Я пробовал массив, список, вектор …

// Class representing a ray: oriented halfline
struct Ray{

public:
// origin of the ray
Vector3 origin;
// normalized direction
Vector3 direction;
// computed intersection point along the ray
float t;
// intersected triangle
Triangle *triangle;

//list <int> mailbox;
int *mailbox;
//set<int> mailbox;
int intersections;
.
.
.
.virtual void traverse(Ray &ray){

for (vector<Triangle*>::size_type i=0; i<T.size(); i++){

if(find(ray.mailbox, ray.mailbox + 8, T[i]->id) == ray.mailbox + 8){
//if(ray.mailbox.find(T[i]->id) == ray.mailbox.end()){
T[i]->CastRay(ray);
//ray.mailbox.insert(ray.mailbox.begin() + (T[i]->id % 8));
ray.mailbox[(T[i]->id % 8)] = T[i]->id;
//ray.mailbox.pop_front();
//ray.mailbox.push_back(T[i]->id);
//assert(ray.mailbox.size() == 8);
}

}
}

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]