## GRP1 discussion

### Re: GRP1 discussion

Ow but that explains: you can't pick a random direction in a cube. If you do that, you get random directions with a density that is higher in the corners, leading to the artifacts you complained about. *If* you pick directions in a cube, you need to reject all directions with a magnitude greater than 1 (so you get a sphere again).

### Re: GRP1 discussion

Impressive work there!

One of my favorite courses, hope everyone enjoys it!

One of my favorite courses, hope everyone enjoys it!

### Re: GRP1 discussion

Hey guys, have some trouble with my ray triangle intersections and was wondering if any1 could help me out,

here is the code i currently use:

Intersection IntersectionManager::Intersect(Triangle* pTriangle, Ray* pRay)

{

Vector3 edge1 = pTriangle->v1 - pTriangle->v0;

Vector3 edge2 = pTriangle->v2 - pTriangle->v0;

Vector3 pvec = Cross(pRay->mDir, edge2);

double det = Dot(edge1, pvec);

if(CULLING)

{

if(det < EPSILON){return Intersection();}

Vector3 tvec = pRay->mOrigin - pTriangle->v0;

double u = Dot(tvec, pvec);

if(u < 0.0f || u > det){return Intersection();}

Vector3 qvec = Cross(tvec, edge1);

double v = Dot(pRay->mDir, qvec);

if(v < 0.0f || u + v > det){return Intersection();}

float t = Dot(edge2, qvec) * (1.0f/(float)det);

pRay->mDistToIntersect = t;

return Intersection(pRay->mOrigin + (pRay->mDir * t), pTriangle->mNormal, pTriangle->mMaterial, Matrix4());

}

else

{

if(det > -EPSILON && det < EPSILON){ return Intersection();}

float invdet = 1.0f/det;

Vector3 tvec = pRay->mOrigin - pTriangle->v0;

float u = Dot(tvec, pvec) * invdet;

if(u < 0.0f || u > 1.0f){return Intersection();}

Vector3 qvec = Cross(tvec, edge1);

float v = Dot(pRay->mDir, qvec) * invdet;

if(v < 0.0f || u + v > 1.0f){return Intersection();}

float t = Dot(edge2, qvec) * invdet;

pRay->mDistToIntersect = t;

return Intersection(pRay->mOrigin + (pRay->mDir * t), pTriangle->mNormal, pTriangle->mMaterial, Matrix4());

}

}

and here is an image of the result, the model used has 2500 triangles

as you can see it doesn't render every other triangle, i already checked if my BVH was being filled correctly and if my model loader was working properly

thanks in advance!

here is the code i currently use:

Intersection IntersectionManager::Intersect(Triangle* pTriangle, Ray* pRay)

{

Vector3 edge1 = pTriangle->v1 - pTriangle->v0;

Vector3 edge2 = pTriangle->v2 - pTriangle->v0;

Vector3 pvec = Cross(pRay->mDir, edge2);

double det = Dot(edge1, pvec);

if(CULLING)

{

if(det < EPSILON){return Intersection();}

Vector3 tvec = pRay->mOrigin - pTriangle->v0;

double u = Dot(tvec, pvec);

if(u < 0.0f || u > det){return Intersection();}

Vector3 qvec = Cross(tvec, edge1);

double v = Dot(pRay->mDir, qvec);

if(v < 0.0f || u + v > det){return Intersection();}

float t = Dot(edge2, qvec) * (1.0f/(float)det);

pRay->mDistToIntersect = t;

return Intersection(pRay->mOrigin + (pRay->mDir * t), pTriangle->mNormal, pTriangle->mMaterial, Matrix4());

}

else

{

if(det > -EPSILON && det < EPSILON){ return Intersection();}

float invdet = 1.0f/det;

Vector3 tvec = pRay->mOrigin - pTriangle->v0;

float u = Dot(tvec, pvec) * invdet;

if(u < 0.0f || u > 1.0f){return Intersection();}

Vector3 qvec = Cross(tvec, edge1);

float v = Dot(pRay->mDir, qvec) * invdet;

if(v < 0.0f || u + v > 1.0f){return Intersection();}

float t = Dot(edge2, qvec) * invdet;

pRay->mDistToIntersect = t;

return Intersection(pRay->mOrigin + (pRay->mDir * t), pTriangle->mNormal, pTriangle->mMaterial, Matrix4());

}

}

and here is an image of the result, the model used has 2500 triangles

as you can see it doesn't render every other triangle, i already checked if my BVH was being filled correctly and if my model loader was working properly

thanks in advance!

Dave Schachtschabel - 121377

2GA - 2PR

2GA - 2PR

### Re: GRP1 discussion

Are you sure your model is triangulated? I've seen that same thing happen, because the model loader I used would load quads as triangles.

Wout van Poppel | 3GA-2PR

### Re: GRP1 discussion

I know the course has ended, but here's a render of a 8.9kk triangle model

Dave Schachtschabel - 121377

2GA - 2PR

2GA - 2PR

### Re: GRP1 discussion

Hi all,

The pretty image contest has been opened on ompf2.com:

http://ompf2.com/viewtopic.php?f=5&t=1892

Please note that if you register on that forum you will need to send me an e-mail to get your account activated.

That's an awesome forum btw, with lots of discussions on ray tracing. It's hosted here at IGAD.

- Jacco.

The pretty image contest has been opened on ompf2.com:

http://ompf2.com/viewtopic.php?f=5&t=1892

Please note that if you register on that forum you will need to send me an e-mail to get your account activated.

That's an awesome forum btw, with lots of discussions on ray tracing. It's hosted here at IGAD.

- Jacco.

### Who is online

Users browsing this forum: No registered users and 0 guests