fixed negative distance in voxel traversing
This commit is contained in:
@@ -26,6 +26,8 @@ vec3 solve(vec3 hitPoint, vec3 view, vec3 normal)
|
||||
*/
|
||||
vec4 castBricks(vec3 origin, vec3 start, vec3 dir, vec3 incAxis, uint addr)
|
||||
{
|
||||
vec3 o = origin;
|
||||
|
||||
// Change scale
|
||||
origin = start - origin;
|
||||
origin += dir*0.00001;
|
||||
@@ -49,7 +51,7 @@ vec4 castBricks(vec3 origin, vec3 start, vec3 dir, vec3 incAxis, 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) / 32.0;
|
||||
vec3 hitPoint = (origin + dir * len) / 32.0 + o;
|
||||
|
||||
// Normal vector (negate previous increment axis and mult by sign)
|
||||
vec3 normal = -incAxis * raySign;
|
||||
@@ -96,7 +98,7 @@ vec3 castNodes(vec3 origin, vec3 dir)
|
||||
{
|
||||
// Hit point
|
||||
vec3 mini = (pos-origin+0.5 - raySign*0.5) * rayInv;
|
||||
float len = max(mini.x, max(mini.y, mini.z));
|
||||
float len = max(0.0, max(mini.x, max(mini.y, mini.z)));
|
||||
vec3 hitPoint = origin + dir * len;
|
||||
// Normal vector (negate previous increment axis and mult by sign)
|
||||
//vec3 normal = -incAxis * raySign;
|
||||
@@ -104,7 +106,7 @@ vec3 castNodes(vec3 origin, vec3 dir)
|
||||
|
||||
// Cast brick
|
||||
vec4 result = castBricks(pos, hitPoint, dir, incAxis, node);
|
||||
if(result.a > 0.0) return result.rgb; //todo: continue if not hit
|
||||
if(result.a > 0.0) return result.rgb;
|
||||
}
|
||||
|
||||
// Get new closest axis to increment
|
||||
|
||||
Reference in New Issue
Block a user