fixed negative distance in voxel traversing
This commit is contained in:
Binary file not shown.
@@ -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
|
||||
|
||||
@@ -7,9 +7,10 @@ layout(location=0) out vec4 out_color;
|
||||
|
||||
layout(set=0, binding=0) uniform Uniforms
|
||||
{
|
||||
mat4 view_matrix;
|
||||
mat4 proj_matrix_inv;
|
||||
vec3 cam_pos;
|
||||
mat4 _viewMatrix;
|
||||
mat4 _projMatrixInv;
|
||||
vec3 _CamPos;
|
||||
float _Time;
|
||||
};
|
||||
|
||||
//layout(set = 1, binding = 0) uniform texture3D node_tex;
|
||||
@@ -30,9 +31,9 @@ layout(set=2,binding=0) uniform usampler3D bricksTexture;
|
||||
void main()
|
||||
{
|
||||
// Calculate ray direction
|
||||
vec3 view_dir = (proj_matrix_inv * vec4(vert_uv, 0, 1)).xyz;
|
||||
vec3 ray_dir = normalize(view_matrix * vec4(view_dir,0)).xyz;
|
||||
vec3 view_dir = (_projMatrixInv * vec4(vert_uv, 0, 1)).xyz;
|
||||
vec3 ray_dir = normalize(_viewMatrix * vec4(view_dir,0)).xyz;
|
||||
|
||||
// Raycast
|
||||
out_color = vec4(castNodes(cam_pos, ray_dir), 1.0);
|
||||
out_color = vec4(castNodes(_CamPos, ray_dir), 1.0);
|
||||
}
|
||||
Reference in New Issue
Block a user