
464 VI Compute
__global Node gNodes ;
__global u32 gLinks ;
float f ;
u32 n , uv ;
int o = getOffset( lodRes );
while( nodeIdx != breakIdx )
{
Aabb node = NodeGetAabb ( gNodes [ nodeIdx ]);// reconstruct AABB
float frac = AabbIntersect ( node ,&from ,&to ,&invRay );
bool isLeaf = nodeIdx >= o ;
if( frac < f )
{
if( isLeaf )
{
f = frac ;
n = gNodes[ nodeIdx ]. m_n ;
uv = gNodes [ nodeIdx ]. m_uv ;
nodeIdx = LinkGetSkip ( gLinks [ nodeIdx ]);
}
else
nodeIdx = LinkGetChild ( gLinks [ nodeIdx ]);
}
else
nodeIdx = LinkGetSkip ( gLinks [ nodeIdx ]);
}
Listing 2.1. Bottom-level hierarchy traversal.
Before we start intersecting rays with VD patches, we gather all the rays
hitting ...