continue traversing nodes if brick not hit

This commit is contained in:
Piotrek
2021-04-23 16:06:54 +02:00
parent af5c2f2532
commit b59523c13b
7 changed files with 20 additions and 15 deletions
+10 -8
View File
@@ -24,7 +24,7 @@ vec3 solve(vec3 hitPoint, vec3 view, vec3 normal)
* dir: Camera view direction (ray direction)
* addr: Number given by node, afaik brick offset in brick array
*/
vec3 castBricks(vec3 origin, vec3 start, vec3 dir, uint addr)
vec4 castBricks(vec3 origin, vec3 start, vec3 dir, vec3 incAxis, uint addr)
{
// Change scale
origin = start - origin;
@@ -38,7 +38,8 @@ vec3 castBricks(vec3 origin, vec3 start, vec3 dir, uint addr)
vec3 dist = (pos-origin+0.5 + raySign*0.5) * rayInv;
ivec3 offset = ivec3(0, 0, (addr-1)*32);
vec3 incAxis = vec3(0,0,0);
vec3 tmp = abs(raySign);
for(int i=0;i<110;i++)
{
// Get brick
@@ -48,11 +49,11 @@ vec3 castBricks(vec3 origin, vec3 start, vec3 dir, uint addr)
// Hit point
vec3 mini = (pos-origin+0.5 - raySign*0.5) * rayInv;
float len = max(mini.x, max(mini.y, mini.z));
vec3 hitPoint = (origin + dir * len) + start;
vec3 hitPoint = (origin + dir * len) / 32.0;
// Normal vector (negate previous increment axis and mult by sign)
vec3 normal = -incAxis * raySign;
return solve(hitPoint, dir, normal);
return vec4(solve(hitPoint, dir, normal), 1.0);
}
// Get new closest axis to increment
@@ -60,12 +61,12 @@ vec3 castBricks(vec3 origin, vec3 start, vec3 dir, uint addr)
dist += incAxis * raySign * rayInv;
pos += incAxis * raySign;
// Outside bounds
// Check for bounds
if(pos.x < 0 || pos.y < 0 || pos.z < 0) { break; }
if(pos.x > 32 || pos.y > 32 || pos.z > 32) { break; }
}
return vec3(0.5,0.5,0.5);
return vec4(0.5,0.5,0.5, 0.0);
}
/*
@@ -102,7 +103,8 @@ vec3 castNodes(vec3 origin, vec3 dir)
//return solve(hitPoint, dir, normal);
// Cast brick
return castBricks(pos, hitPoint, dir, node); //todo: continue if not hit
vec4 result = castBricks(pos, hitPoint, dir, incAxis, node);
if(result.a > 0.0) return result.rgb; //todo: continue if not hit
}
// Get new closest axis to increment
@@ -111,7 +113,7 @@ vec3 castNodes(vec3 origin, vec3 dir)
pos += incAxis * raySign;
// Outside bounds
// if(pos.x < 0 || pos.y < 0 || pos.z < 0) { break; }
//if(pos.x < 0 || pos.y < 0 || pos.z < 0) { break; }
// if(pos.x > 1 || pos.y > 1 || pos.z > 1) { break; }
}