fixed negative distance in voxel traversing

This commit is contained in:
Piotrek
2021-04-23 22:44:03 +02:00
parent 526ff05ed2
commit 829ae1ddb6
7 changed files with 37 additions and 27 deletions
Binary file not shown.
+5 -3
View File
@@ -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 -6
View File
@@ -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);
}