光线追踪中的反向邮箱

时间:2013-05-02 07:58:00

标签: c++ performance raytracing

我使用反向邮箱处理光线跟踪,这意味着我记得每一条光线都记得我交叉的三角形的最后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);
        }

    }
}

0 个答案:

没有答案