Finally found the root of that off by one error. Changed up the readme.
This commit is contained in:
@@ -76,8 +76,8 @@ bool cast_light_intersection_ray(
|
||||
voxel.xyz += voxel_step.xyz * face_mask.xyz;
|
||||
|
||||
// If the ray went out of bounds
|
||||
int3 overshoot = voxel <= *map_dim;
|
||||
int3 undershoot = voxel > 0;
|
||||
int3 overshoot = voxel < *map_dim;
|
||||
int3 undershoot = voxel >= 0;
|
||||
|
||||
if (overshoot.x == 0 || overshoot.y == 0 || overshoot.z == 0 || undershoot.x == 0 || undershoot.y == 0) {
|
||||
return false;
|
||||
@@ -95,6 +95,9 @@ bool cast_light_intersection_ray(
|
||||
return false;
|
||||
}
|
||||
|
||||
// 0 1 2 3 4 5 6 7 8 9
|
||||
// {r, g, b, i, x, y, z, x', y', z'}
|
||||
|
||||
float4 view_light(float4 in_color, float3 light, float3 view, int3 mask) {
|
||||
|
||||
float diffuse = max(dot(normalize(convert_float3(mask)), normalize(light)), 0.0f);
|
||||
@@ -276,6 +279,7 @@ __kernel void raycaster(
|
||||
float4 fog_color = { 0.73, 0.81, 0.89, 0.8 };
|
||||
float4 voxel_color = (float4)(0.50, 0.0, 0.50, 0.1);
|
||||
float4 overshoot_color = { 0.25, 0.48, 0.52, 0.8 };
|
||||
float4 overshoot_color_2 = { 0.25, 0.1, 0.52, 0.8 };
|
||||
|
||||
|
||||
// Andrew Woo's raycasting algo
|
||||
@@ -287,15 +291,15 @@ __kernel void raycaster(
|
||||
voxel.xyz += voxel_step.xyz * face_mask.xyz;
|
||||
|
||||
// If the ray went out of bounds
|
||||
int3 overshoot = voxel <= *map_dim;
|
||||
int3 undershoot = voxel > 0;
|
||||
int3 overshoot = voxel < *map_dim;
|
||||
int3 undershoot = voxel >= 0;
|
||||
|
||||
if (overshoot.x == 0 || overshoot.y == 0 || overshoot.z == 0 || undershoot.x == 0 || undershoot.y == 0){
|
||||
write_imagef(image, pixel, white_light(mix(fog_color, overshoot_color, 1.0 - max(dist / 700.0f, (float)0)), (float3)(lights[7], lights[8], lights[9]), face_mask));
|
||||
return;
|
||||
}
|
||||
if (undershoot.z == 0) {
|
||||
write_imagef(image, pixel, white_light(mix(fog_color, overshoot_color, 1.0 - max(dist / 700.0f, (float)0)), (float3)(lights[7], lights[8], lights[9]), face_mask));
|
||||
write_imagef(image, pixel, white_light(mix(fog_color, overshoot_color_2, 1.0 - max(dist / 700.0f, (float)0)), (float3)(lights[7], lights[8], lights[9]), face_mask));
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -313,29 +317,41 @@ __kernel void raycaster(
|
||||
else if (voxel_data == 5) {
|
||||
voxel_color = (float4)(0.25, 0.52, 0.30, 0.1);
|
||||
}
|
||||
else if (voxel_data == 1) {
|
||||
voxel_color = (float4)(0.929, 0.957, 0.027, 0.7);
|
||||
}
|
||||
|
||||
// set to which face
|
||||
float3 face_position = convert_float3(face_mask * voxel_step);
|
||||
|
||||
// set the xy for that face
|
||||
face_position += convert_float3(face_mask == (int3)(0,0,0)) * ((intersection_t) / delta_t);
|
||||
//face_position += convert_float3(face_mask == (int3)(0,0,0)) * (rand(&seed) % 10) / 50.0;
|
||||
|
||||
if (cast_light_intersection_ray(
|
||||
map,
|
||||
map_dim,
|
||||
(float3)(lights[4], lights[5], lights[6]) - (convert_float3(voxel)),
|
||||
(convert_float3(voxel) - convert_float3(face_mask * voxel_step)),
|
||||
lights,
|
||||
(convert_float3(voxel) - convert_float3(face_mask * voxel_step)),//face_position),//
|
||||
lights,
|
||||
light_count
|
||||
)) {
|
||||
)) {
|
||||
|
||||
write_imagef(image, pixel, voxel_color);
|
||||
//write_imagef(image, pixel, voxel_color);
|
||||
return;
|
||||
}
|
||||
|
||||
// 0 1 2 3 4 5 6 7 8 9
|
||||
// {r, g, b, i, x, y, z, x', y', z'}
|
||||
|
||||
write_imagef(
|
||||
image,
|
||||
pixel,
|
||||
view_light(
|
||||
voxel_color,
|
||||
(convert_float3(voxel) + offset) - (float3)(lights[4], lights[5], lights[6]),
|
||||
(convert_float3(voxel) + offset) - (*cam_pos),
|
||||
(convert_float3(voxel) ) - (float3)(lights[4], lights[5], lights[6]),
|
||||
(convert_float3(voxel) ) - (*cam_pos),
|
||||
face_mask * voxel_step
|
||||
)
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user