我使用反向邮箱处理光线跟踪,这意味着我记得每一条光线都记得我交叉的三角形的最后8个ID。如果ID的三角形在邮箱中,并且如果我再次获得相同的ID,则不再进行交叉计算。它减少了交叉计算的数量,但计算时间更差。
我的代码中有一部分......有什么想法可以加快速度吗?我试过数组,列表,矢量......
// 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);
}
}
}