Skip to content

Commit 7908906

Browse files
committed
Fix y-direction LOD selection
Whoops, scalar product of orthogonals is always gonna be 0...
1 parent 3321787 commit 7908906

File tree

1 file changed

+14
-8
lines changed

1 file changed

+14
-8
lines changed

palace-core/src/operators/raycaster/raycaster.glsl

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,7 @@ void main()
175175
float diag = length(vec3(to_glsl_uvec3(root_level.dimensions)) * to_glsl_vec3(root_level.spacing));
176176

177177
uvec2 eep_x_offset = uvec2(1,0);
178+
uvec2 eep_y_offset = uvec2(0,1);
178179

179180
EEPoint eep_x;
180181
if(!sample_ee(out_pos + eep_x_offset, eep_x, root_level)) {
@@ -183,25 +184,30 @@ void main()
183184
eep_x.exit = vec3(1.0);
184185
}
185186
}
187+
EEPoint eep_y;
188+
if(!sample_ee(out_pos + eep_y_offset, eep_y, root_level)) {
189+
if(!sample_ee(out_pos - eep_y_offset, eep_y, root_level)) {
190+
eep_y.entry = vec3(0.0);
191+
eep_y.exit = vec3(1.0);
192+
}
193+
}
186194
vec3 center = eep.entry;
187195
vec3 front = eep.exit - eep.entry;
188196

189197
vec3 rough_dir_x = eep_x.exit - eep.exit;
190-
vec3 rough_dir_y = cross(rough_dir_x, front);
198+
vec3 rough_dir_y = eep_y.exit - eep.exit;
191199
vec3 dir_x = normalize(cross(rough_dir_y, front));
192-
vec3 dir_y = normalize(cross(dir_x, front));
200+
vec3 dir_y = normalize(cross(rough_dir_x, front));
193201

194202
vec3 start = eep.entry;
195203
vec3 end = eep.exit;
196204
float t_end = distance(start, end);
197205
vec3 dir = normalize(end - start);
198206

199-
vec3 entry_diff = eep_x.entry - eep.entry;
200-
vec3 exit_diff = eep_x.exit - eep.exit;
201-
float start_pixel_dist_x = abs(dot(dir_x, entry_diff));
202-
float end_pixel_dist_x = abs(dot(dir_x, exit_diff));
203-
float start_pixel_dist_y = abs(dot(dir_y, entry_diff));
204-
float end_pixel_dist_y = abs(dot(dir_y, exit_diff));
207+
float start_pixel_dist_x = abs(dot(dir_x, eep_x.entry - eep.entry));
208+
float end_pixel_dist_x = abs(dot(dir_x, eep_x.exit - eep.exit));
209+
float start_pixel_dist_y = abs(dot(dir_y, eep_y.exit - eep.exit));
210+
float end_pixel_dist_y = abs(dot(dir_y, eep_y.exit - eep.exit));
205211

206212

207213
float lod_coarseness = consts.lod_coarseness;

0 commit comments

Comments
 (0)